HID 体系结构

Windows 中的 HID 驱动程序堆栈的体系结构基于名为 hidclass.sys 的类驱动程序。 客户端和传输微型驱动程序从用户模式或内核模式访问类驱动程序。

HID 类驱动程序

系统提供的 HID 类驱动程序是 HID 设备设置类的 WDM 函数驱动程序和总线驱动程序 (HIDClass) 。 HID 类驱动程序的可执行组件 hidclass.sys。 HID 类驱动程序是 HID 客户端和各种传输之间的粘附点。 这允许 HID 客户端以独立于传输方式编写。 此抽象级别允许客户端在引入新标准或第三方传输时继续 (,) 几乎不需要修改。

下面是体系结构表示形式。

简化的 hid 驱动程序堆栈,显示 hid 客户端、hid 类驱动程序和 hid 传输组件。

上图包括以下内容:

  • HID 客户端 – 标识 Windows 和第三方客户端及其接口。
  • HID 类驱动程序 - hidclass.sys 可执行文件。
  • HID 传输微型驱动程序 - 标识 Windows 和第三方传输及其接口。

下面是通用 HID 客户端和传输的设备堆栈关系图。

适用于通用 HID 客户端和传输的 HID 设备堆栈。

下面是另一个设备堆栈示意图,其中显示了 USB 上 HID 键盘和鼠标集合。

USB 键盘和鼠标的 HID 设备堆栈。

HID 客户端

HID 客户端是与 HIDClass.sys 通信的驱动程序、服务或应用程序,通常表示特定类型的设备 (,例如传感器、键盘、鼠标等) 。 它们通过硬件 ID 或特定的 HID 集合标识设备,并通过以下指南与 HID 集合通信。

用户模式驱动程序和应用程序以及内核模式驱动程序执行以下操作来操作 HID 集合:

  • 用户模式驱动程序和应用程序使用 HIDClass 支持例程 (HidD_Xxx) 获取有关 HID 集合的信息。
  • 内核模式驱动程序、用户模式驱动程序和应用程序使用 HID 分析支持例程 (HidP_Xxx) ,而内核模式驱动程序使用 HID 类驱动程序 IOCTL 来处理 HID 报告。

下表简化了上面列出的信息。

模式 驱动程序 应用程序
用户模式 HidD_Xxx HidP_Xxx
内核模式 HidD_Xxx 或 IOCTL_HID_xxx 空值

有关详细信息,请参阅 打开 HID 集合

Windows 中支持的 HID 客户端

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 移动版) 使用者控件 共享 (适用于Windows 10和Windows 10 移动版)
0x000D 0x0001 外部笔设备 排他
0x000D 0x0002 集成笔设备 排他
0x000D 0x0004 触摸屏 排他
0x000D 0x0005 精密触摸板 (PTP) 排他
0x0020 *多个 传感器 共享
0x0084 0x0004 HID UPS 电池 共享
0x008C 0x0002 是 (Windows 8.1 及更高版本) 条形码扫描仪 (hidscanner.dll) 共享

在上表中,输入 HID 客户端的访问模式是 独占 的,以防止其他 HID 客户端在不是该输入的目标接收者时截获或接收全局输入状态。 出于安全原因,原始输入管理器 (RIM) 以独占方式打开所有此类设备。

如果设备由 RIM 以 独占 模式打开,则用户仍然可以在不请求读取和写入权限的情况下打开 HID 设备接口,并通过 HIDClass 支持例程 (HidD_GetXxx) 获取 HID 设备信息。

共享模式允许多个应用程序访问设备。 例如,多个应用程序可以访问条形码扫描仪来查询设备功能和检索统计信息。 但是,从条形码扫描仪检索解码的数据是在 独占 模式下完成的。 使用情况由 USB-IF 使用情况表定义。

*多个:0x00中的传感器使用情况 - 0xFF出于不同目的细分。 例如,0x10指示生物识别传感器;0x40指示光传感器。 这些分配不是连续的。 有关传感器用法的列表,请参阅 HID 的 USB-IF 设备类定义。 有关 Windows 中支持的传感器使用情况的信息,请参阅 HID 传感器使用情况

HID 传输驱动程序

HID 类驱动程序旨在使用 HID 微型驱动程序访问硬件输入设备。 HID 微型驱动程序抽象化它支持的输入设备的特定于设备的操作。 HID 微型驱动程序通过向 HID 类驱动程序注册,将其操作绑定到 HID 类驱动程序。 HID 类驱动程序通过调用微型驱动程序的支持例程与 HID 微型驱动程序进行通信。 HID 微型驱动程序反过来又将通信发送到基础总线或端口驱动程序的驱动程序堆栈。

Windows 中支持的 HID 传输方式

有关支持的 HID 传输的列表,请参阅 此页

Windows 硬件实验室工具包中的 USB 通用 HID 测试 (HLK) 涵盖 HidUsb 和 HidClass 驱动程序。 第三方 HID 微型驱动程序没有 HLK 测试。