Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Архитектура стека драйверов HID в Windows основана на драйвере класса с именемhidclass.sys. Клиенты и транспортные минидрайверы получают доступ к драйверу класса из пользовательского режима или режима уровня ядра.
Драйвер класса HID
Системный драйвер класса HID — это драйвер функции WDM и драйвер шины для класса установки устройства HID (HIDClass). Исполняемый компонент драйвера класса HID — hidclass.sys. Драйвер класса HID является соединительным звеном между клиентами HID и различными транспортами, что позволяет разрабатывать клиента HID независимо от транспорта. Этот уровень абстракции позволяет клиентам продолжать работать (без изменений) при создании нового стандарта или стороннего транспорта.
На следующей схеме представлено представление архитектуры HID.
На предыдущей схеме приведены следующие компоненты:
- Клиенты HID — идентифицирует клиенты Windows и сторонние клиенты и их интерфейсы.
- Драйвер класса HID — исполняемый файл hidclass.sys .
- Минидрайвер для транспорта HID — идентифицирует транспорты Windows, сторонние транспорты и их интерфейсы.
Ниже приведена схема стека устройств универсального клиента HID и транспорта.
Представлена ещё одна схема стека устройств, показывающая коллекции клавиатуры и мыши HID через USB.
Клиенты HID
Клиенты HID — это драйверы, службы или приложения, которые взаимодействуют с HIDClass.sys и часто представляют определенный тип устройства (например, датчик, клавиатура, мышь и т. д.). Они определяют устройство с помощью идентификатора оборудования или определенной коллекции HID и взаимодействуют с коллекцией HID с помощью следующих рекомендаций.
Драйверы и приложения в пользовательском режиме и драйверы в режиме ядра выполняют следующие действия, чтобы управлять коллекциями HID:
- Драйверы и приложения в пользовательском режиме используют подпрограммы поддержки HIDClass (HidD_Xxx) для получения сведений о коллекции HID.
- Драйверы режима ядра и пользовательского режима, а также приложения используют функции синтаксического анализа HID (HidP_Xxx), а драйверы режима ядра используют IOCTL класса HID для обработки отчетов HID.
В следующей таблице упрощены сведения.
| Режим | Драйверы | Приложения |
|---|---|---|
| Режим пользователя | HidD_Xxx | HidP_Xxx |
| Режим ядра | HidD_Xxx ИЛИ IOCTL_HID_xxx | Не применимо |
Дополнительные сведения см. в разделе "Открытие коллекций HID".
Клиенты HID, поддерживаемые в Windows
Windows поддерживает следующие коллекции верхнего уровня:
| Страница использования | Использование | Примечания. | Режим доступа |
|---|---|---|---|
| 0x0001 | 0x0001 — 0x0002 | Драйвер класса мыши и драйвер сопоставителя | Исключительный |
| 0x0001 | 0x0004 — 0x0005 | Игровые контроллеры | Общее |
| 0x0001 | 0x0006 - 0x0007 | Драйвер класса Клавиатура/Keypad и драйвер маппера | Исключительный |
| 0x0001 | 0x000C | Переключатель режима полета | Общее |
| 0x0001 | 0x0080 | Системные элементы управления питанием | Общее |
| 0x000C | 0x0001 | Элементы управления для потребителя | Общее |
| 0x000D | 0x0001 | Внешнее устройство пера | Исключительный |
| 0x000D | 0x0002 | Встроенное устройство пера | Исключительный |
| 0x000D | 0x0004 | Touchscreen | Исключительный |
| 0x000D | 0x0005 | Сенсорная панель точности (PTP) | Исключительный |
| 0x0020 | *Многократный | Датчики | Общее |
| 0x0084 | 0x0004 | Аккумулятор HID UPS | Общее |
| 0x008C | 0x0002 | Сканер штрихкодов (hidscanner.dll) | Общее |
В приведенной выше таблице режим доступа для входных клиентов HID является монопольным , чтобы предотвратить перехват или получение глобального входного состояния других клиентов HID, если они не являются целевым получателем этих входных данных. По соображениям безопасности диспетчер необработанных входных данных (RIM) открывает все такие устройства исключительно.
Если RIM открывает устройство в монопольном режиме, пользователь по-прежнему может открывать интерфейс устройства HID без запроса разрешений на чтение и запись и получать сведения об устройстве HID с помощью подпрограмм поддержки HIDClass (HidD_GetXxx).
Режим общего доступа позволяет нескольким приложениям получать доступ к устройству. Например, несколько приложений могут получить доступ к сканеру штрихкодов, чтобы узнать о возможностях устройств и получить статистику. Однако извлечение декодированных данных из сканера штрихкодов выполняется в монопольном режиме. Использование определяется в таблицах использованияUSB-IF.
*Несколько: использование датчиков из 0x00 — 0xFF сегментируются для различных целей. Например, 0x10 указывает биометрический датчик; 0x40 указывает датчик света. Эти выделения не являются смежными. Список использования датчиков см. в разделеUSB-IF Определения классов устройств для HID. Сведения об использовании датчиков, поддерживаемых в Windows, см. в разделе "Использование датчиков HID".
Драйвер транспорта HID
Драйвер класса HID предназначен для использования мини-драйверов HID для доступа к устройству аппаратного ввода. Минидрайвер HID абстрагирует операции, специфичные для устройств ввода, которые он поддерживает. Минидрайвер HID связывает свою операцию с драйвером класса HID путем регистрации у драйвера класса HID. Драйвер класса HID взаимодействует с минидрайвером HID, вызывая рутины поддержки минидрайвера. Минидрайвер HID, в свою очередь, осуществляет передачу данных по стеку драйверов к базовому драйверу шины или порта.
Поддерживаемые в Windows транспорты HID
Список поддерживаемых транспорта HID см. в обзоре транспорта HID.
USB Generic HID Test в Windows Hardware Lab Kit (HLK) охватывает драйверы HidUsb и HidClass. Нет теста HLK для сторонних мини-драйверов HID.