HID 体系结构
Windows 中的 HID 驱动程序堆栈的体系结构基于名为 hidclass.sys 的类驱动程序。 客户端和传输微型驱动程序从用户模式或内核模式访问类驱动程序。
HID 类驱动程序
系统提供的 HID 类驱动程序是 HID 设备设置类的 WDM 函数驱动程序和总线驱动程序(HIDClass)。 HID 类驱动程序 的可执行组件hidclass.sys。 HID 类驱动程序是 HID 客户端和各种传输之间的粘附,允许以独立于传输的方式编写 HID 客户端。 这种抽象级别允许客户端在引入新标准或第三方传输时继续工作(几乎没有修改)。
下图是 HID 体系结构的表示形式。
上图包括:
- HID 客户端 – 标识 Windows 和第三方客户端及其接口。
- HID 类驱动程序 - hidclass.sys 可执行文件。
- HID 传输微型驱动程序 - 标识 Windows 和第三方传输及其接口。
下面是通用 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 支持以下顶级集合:
“使用情况”页 | 使用情况 | 备注 | 访问模式 |
---|---|---|---|
0x0001 | 0x0001 - 0x0002 | 鼠标类驱动程序和映射器驱动程序 | 专享 |
0x0001 | 0x0004 - 0x0005 | 游戏控制器 | 共享 |
0x0001 | 0x0006 - 0x0007 | 键盘/键盘类驱动程序和映射器驱动程序 | 专享 |
0x0001 | 0x000C | 飞行模式开关 | 共享 |
0x0001 | 0x0080 | 系统控件(电源) | 共享 |
0x000C | 0x0001 | 使用者控件 | 共享 |
0x000D | 0x0001 | 外部笔设备 | 专享 |
0x000D | 0x0002 | 集成笔设备 | 专享 |
0x000D | 0x0004 | 触摸屏 | 专享 |
0x000D | 0x0005 | 精确触摸板 (PTP) | 专享 |
0x0020 | *倍数 | Sensors | 共享 |
0x0084 | 0x0004 | HID UPS 电池 | 共享 |
0x008C | 0x0002 | 条形码扫描仪(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 传输的列表,请参阅 HID 传输概述。
Windows 硬件实验室工具包 (HLK) 中的 USB 通用 HID 测试 涵盖 HidUsb 和 HidClass 驱动程序。 第三方 HID 微型驱动程序没有 HLK 测试。