Архитектура HID
Архитектура стека драйверов HID в Windows основана на драйвере класса с именемhidclass.sys. Клиенты и транспортные мини-драйверы получают доступ к драйверу класса из пользовательского режима или режима ядра.
Драйвер класса HID
Системный драйвер класса HID — это драйвер функции WDM и драйвер шины для класса настройки устройства HID (HIDClass). Исполняемый компонент драйвера класса HID — этоhidclass.sys. Драйвер класса 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 поддерживает следующие коллекции верхнего уровня:
Страница "Использование" | Использование | Windows 7 | Windows 8 | Windows 10 | Примечания | Режим доступа |
---|---|---|---|---|---|---|
0x0001 | 0x0001 — 0x0002 | Да | Да | Да | Драйвер класса мыши и драйвер сопоставителя | Монопольная блокировка |
0x0001 | 0x0004 — 0x0005 | Да | Да | Да | Игровые контроллеры | Совмещаемая блокировка |
0x0001 | 0x0006 — 0x0007 | Да | Да | Да | Драйвер класса клавиатуры и клавиатуры и драйвер сопоставителя | Монопольная блокировка |
0x0001 | 0x000C | Нет | Да | Да | Переключатель режима полета | Совмещаемая блокировка |
0x0001 | 0x0080 | Да | Да | Да | Системные элементы управления (питание) | Совмещаемая блокировка |
0x000C | 0x0001 | Да | Да | Да (для Windows 10 и Windows 10 Mobile) | Элементы управления потребителем | Общий (для Windows 10 и Windows 10 Mobile) |
0x000D | 0x0001 | Да | Да | Да | Внешнее устройство пера | Монопольная блокировка |
0x000D | 0x0002 | Да | Да | Да | Встроенное устройство пера | Монопольная блокировка |
0x000D | 0x0004 | Да | Да | Да | Touchscreen | Монопольная блокировка |
0x000D | 0x0005 | Нет | Да | Да | Точность сенсорной панели (PTP) | Монопольная блокировка |
0x0020 | *Несколько | Нет | Да | Да | Датчики | Совмещаемая блокировка |
0x0084 | 0x0004 | Да | Да | Да | Батарея HID UPS | Совмещаемая блокировка |
0x008C | 0x0002 | Нет | Да (Windows 8.1 и более поздние версии) | Да | Сканер штрихкодов (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, в свою очередь, отправляет сообщения по стеку драйвера к базовому драйверу шины или порта.
Транспорты HID, поддерживаемые в Windows
Список поддерживаемых транспортных средств HID см. на этой странице .
Универсальный тест HID USB в комплекте аппаратной лаборатории Windows (HLK) охватывает драйверы HidUsb и HidClass. Тест HLK для сторонних мини-драйверов HID отсутствует.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по