创建 WDF HID 微型驱动程序

本主题介绍如何使用 Windows 驱动程序框架 (WDF) 创建人机接口设备 (HID) 微型驱动程序。

可以使用 KMDF 或 UMDF 编写 HID 微型驱动程序。 建议从 vhidmini2 微型驱动程序示例开始。 可以使用 KMDF 或 UMDF 2.x 编译此示例驱动程序。

要提供的内容

  1. 你将在 UMDF) 的MsHidUmdf.sys (下编写一个较低的筛选器驱动程序,或者为 KMDF) 编写 MsHidKmdf.sys (,这两者都作为操作系统的一部分包含在内。

  2. 下载并查看 vhidmini2 示例

  3. 从驱动程序的 EvtDriverDeviceAdd 回调函数调用 WdfFdoInitSetFilter

  4. 创建 I/O 队列以接收 MsHidUmdf.sysMsHidKmdf.sys 从类驱动程序传递到驱动程序的 I/O 请求。

  5. 提供一个 EvtIoDeviceControl 回调函数,该函数分支到特定于 IOCTL 的方法处理程序。 查看 WDF HID 微型驱动程序 IOCTL 中所述的 IOCTL ,并确保驱动程序处理设备的相关 IOCTL。

  6. 对于 UMDF,如果驱动程序由 ACPI 枚举,可以选择启用选择性挂起。 在设备的硬件密钥中,添加 EnableDefaultIdleNotificationHandler 子项并将其设置为 1。

  7. 对于 UMDF,请在 INF 文件的 WDF 特定 DDInstall 节中设置以下 INF 指令:

    • UmdfKernelModeClientPolicyAllowKernelModeClients ,以便可以在堆栈中加载内核模式直通驱动程序。
    • 复制UmdfMethodNeitherAction 允许 UMDF 处理METHOD_NEITHER类型的 IOCTL。
    • UmdfFileObjectPolicyAllowNullAndUnknownFileObjects
    • UmdfFsContextUsePolicy to CanUseFsContext2

    例如:

    [hidumdf.NT.Wdf]
    UmdfKernelModeClientPolicy = AllowKernelModeClients
    UmdfMethodNeitherAction=Copy
    UmdfFileObjectPolicy=AllowNullAndUnknownFileObjects
    UmdfFsContextUsePolicy = CanUseFsContext2
    

如果要编写适用于 Windows 7 的 UMDF HID 微型驱动程序, 请下载 Windows 驱动程序工具包 (WDK) 8.1 以获取 HidUmdf.sys的源代码。 然后,编写 UMDF 1.11 驱动程序,并在驱动程序包中包含 HidUmdf.sys 和 UMDF 1.11。

体系结构

HID 类驱动程序 (HidClass.sys) 和框架提供冲突的 WDM 调度例程来处理某些 I/O 请求 (,例如) 微型驱动程序的即插即用和电源管理请求。 因此,HID 微型驱动程序无法同时链接到类驱动程序和框架。 因此,Microsoft 提供 MsHidUmdf.sysMsHidKmdf.sys,它们是驻留在类驱动程序和微型驱动程序之间的 WDM 驱动程序。

MsHidUmdf.sysMsHidKmdf.sys 调用 HID 类驱动程序的 HidRegisterMinidriver 例程以注册为实际的 HID 微型驱动程序。 尽管这些驱动程序充当设备的函数驱动程序,但它们只是将 I/O 请求从类驱动程序传递到驱动程序 (,因此有时称为传递 驱动程序) 。 对于 KMDF 和 UMDF,你提供的唯一组件是 HID 微型驱动程序,它是位于直通驱动程序下的较低筛选器驱动程序。

UMDF 体系结构:KMDF 体系结构

显示驱动程序堆栈中 hidumdf.sys 位置的关系图。

显示驱动程序堆栈中 mshidkmdf.sys 位置的关系图。