Архитектура 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 .
  • Минидрайвер для транспорта HID — идентифицирует транспорты Windows, сторонние транспорты и их интерфейсы.

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

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

Представлена ещё одна схема стека устройств, показывающая коллекции клавиатуры и мыши HID через USB.

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