Поделиться через


Архитектура HID

Архитектура стека драйверов HID в Windows основана на драйвере класса с именем hidclass.sys. Клиенты и мини-накопители транспорта получают доступ к драйверу класса из пользовательского режима или режима ядра.

Драйвер класса HID

Системный драйвер класса HID — это драйвер функции WDM и драйвер шины для класса установки устройства HID (HIDClass). Исполняемый компонент драйвера класса HID hidclass.sys. Драйвер класса HID — это клей между клиентами HID и различными транспортами, что позволяет клиенту HID записываться независимо от транспорта. Этот уровень абстракции позволяет клиентам продолжать работать (без изменений) при создании нового стандарта или стороннего транспорта.

На следующей схеме представлено представление архитектуры HID.

Схема упрощенного стека драйверов HID с клиентами HID, драйвера класса HID и компонентов транспорта HID.

На предыдущей схеме приведены следующие компоненты:

  • Клиенты HID — идентифицирует клиенты Windows и сторонние клиенты и их интерфейсы.
  • Драйвер класса HID — исполняемый файл hidclass.sys .
  • Мини-driver для транспорта HID — определяет транспорты Windows и сторонние транспорты и их интерфейсы.

Ниже приведена схема стека устройств универсального клиента HID и транспорта.

Схема стека устройств HID для универсального клиента HID и транспорта.

Ниже приведена другая схема стека устройств с клавиатурой HID и коллекциями мыши по USB.

Схема стека устройств 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.