HID 客户端驱动程序

如果系统提供的 HID 微型驱动程序不支持设备的端口或总线,则需要供应商提供的微型驱动程序。

下图演示了通用 HIDClass 设备 (的驱动程序堆栈,该设备可能使用可选和供应商提供的必需组件) 。

说明通用 hidclass 设备的驱动程序堆栈的示意图。

Windows 生成驱动程序堆栈,如下所示:

  • 传输堆栈为附加的每个 HID 设备创建一个物理设备对象 (PDO) ,并加载相应的 HID 传输驱动程序,该驱动程序又加载 HID 类驱动程序。
  • HID 类驱动程序为 TLC 创建 PDO。 对于具有多个 TLC 的复杂设备,HID 类驱动程序为每个 TLC 创建 PDO,并确保与 TLC 关联的硬件 ID 包含表示每个设备对象的标识符。
  • 供应商提供的函数或筛选器驱动程序为 HID 集合创建 FDO 或筛选器 DO。
  • 或者,供应商提供的应用程序可以使用 SetupDI* API 打开设备来标识设备,然后使用 HID 支持的例程来与设备通信。 此类设备据说是在 RAW 模式下打开的。

如果系统提供的 微型驱动程序操作 不支持设备,则需要供应商提供的 HID 微型驱动程序。 可以通过两种方式实现此微型驱动程序:

  • HID 客户端驱动程序
  • 应用程序直接访问 HID

如果供应商提供驱动程序 (而不是微型驱动程序) ,该驱动程序:

  • 必须符合 Windows 驱动程序的最低要求。 理想情况下,这应基于用户模式驱动程序框架 (UMDF) 或内核模式驱动程序框架 (KMDF) 。 不太理想的解决方案是创建 WDM 函数驱动程序,如 Windows 驱动程序模型中所述。
  • 通常支持供应商定义的设备接口 -- 请参阅设备接口类。 上层驱动程序或用户模式应用程序使用自定义接口访问供应商驱动程序操作的设备。 自定义接口可能会添加功能,或者可能简化 HID 类驱动程序的接口。

如果驱动程序不是函数驱动程序或筛选器驱动程序,则可以使用即插即用通知来查找 HID 集合。 找到集合后,驱动程序将打开该集合,并以与函数或筛选器驱动程序相同的方式操作它。

重要说明:

  • 如果供应商提供的函数驱动程序为 HID 集合创建 FDO 或筛选器 DO,则不应使用FILE_OBJECT的 FsContext 字段来存储特定于文件对象的数据。 FsContext 字段是为 HID 类驱动程序保留的。 如果堆栈中的另一个驱动程序需要存储特定于文件对象的上下文数据,则应改用 FsContext2 字段。
  • 如果有多个设备附加到 PDO,则没有内置机制来确定哪个设备可以使用 FsContext2 字段。