Архитектура HID
Архитектура стека драйверов HID в Windows основана на драйвере класса с именем hidclass.sys. Клиенты и мини-накопители транспорта получают доступ к драйверу класса из пользовательского режима или режима ядра.
Драйвер класса HID
Системный драйвер класса HID — это драйвер функции WDM и драйвер шины для класса установки устройства HID (HIDClass). Исполняемый компонент драйвера класса HID hidclass.sys. Драйвер класса HID — это клей между клиентами HID и различными транспортами, что позволяет клиенту HID записываться независимо от транспорта. Этот уровень абстракции позволяет клиентам продолжать работать (без изменений) при создании нового стандарта или стороннего транспорта.
На следующей схеме представлено представление архитектуры HID.
На предыдущей схеме приведены следующие компоненты:
- Клиенты HID — идентифицирует клиенты Windows и сторонние клиенты и их интерфейсы.
- Драйвер класса HID — исполняемый файл hidclass.sys .
- Мини-driver для транспорта HID — определяет транспорты Windows и сторонние транспорты и их интерфейсы.
Ниже приведена схема стека устройств универсального клиента HID и транспорта.
Ниже приведена другая схема стека устройств с клавиатурой HID и коллекциями мыши по USB.
Клиенты HID
Клиенты HID — это драйверы, службы или приложения, которые взаимодействуют с HIDClass.sys и часто представляют определенный тип устройства (например, датчик, клавиатура, мышь и т. д.). Они определяют устройство с помощью идентификатора оборудования или определенной коллекции HID и взаимодействуют с коллекцией HID с помощью следующих рекомендаций.
Драйверы и приложения в пользовательском режиме и драйверы в режиме ядра выполняют следующие действия, чтобы управлять коллекциями HID:
- Драйверы и приложения в пользовательском режиме используют подпрограммы поддержки HIDClass (HidD_Xxx) для получения сведений о коллекции HID.
- Драйверы в режиме ядра, драйверы пользовательского режима и приложения используют процедуры синтаксического анализа HID (HidP_Xxx), а драйверы в режиме ядра используют ioCTLs класса HID для обработки отчетов HID.
В следующей таблице упрощены сведения.
Режим | Драйверы | Приложения |
---|---|---|
Режим пользователя | HidD_Xxx | HidP_Xxx |
Режим ядра | HidD_Xxx ИЛИ IOCTL_HID_xxx | Н/П |
Дополнительные сведения см. в разделе "Открытие коллекций HID".
Клиенты HID, поддерживаемые в Windows
Windows поддерживает следующие коллекции верхнего уровня:
Страница использования | Использование | Примечания. | Режим доступа |
---|---|---|---|
0x0001 | 0x0001 — 0x0002 | Драйвер класса мыши и драйвер mapper | Монопольно |
0x0001 | 0x0004 — 0x0005 | Игровые контроллеры | Совмещаемая блокировка |
0x0001 | 0x0006 - 0x0007 | Клавиатура или драйвер класса Keypad и драйвер mapper | Монопольно |
0x0001 | 0x000C | Переключатель режима полета | Совмещаемая блокировка |
0x0001 | 0x0080 | Системные элементы управления (Power) | Совмещаемая блокировка |
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 для доступа к аппаратному устройству ввода. Мини-driver HID абстрагирует операцию устройств ввода, которые она поддерживает. Мини-driver HID привязывает свою операцию к драйверу класса HID путем регистрации в драйвере класса HID. Драйвер класса HID взаимодействует с мини-driver HID, вызывая подпрограммы поддержки minidriver. Мини-driver HID, в свою очередь, отправляет связь по стеку драйверов базовой шине или драйверу портов.
Поддерживаемые в Windows транспорты HID
Список поддерживаемых транспорта HID см. в обзоре транспорта HID.
Usb Generic HID Test in the Windows Hardware Lab Kit (HLK) охватывает драйверы HidUsb и HidClass. Нет теста HLK для сторонних мини-накопителей HID.