WinUSB 体系结构和模块

WinUSB 由两个主要组件组成:

  • Winusb.sys 是一个内核模式驱动程序,可作为筛选器或功能驱动程序安装,位于 USB 设备内核模式设备栈中协议驱动程序的上方。
  • Winusb.dll 是一个用户模式 DLL,它公开了 WinUSB 功能。 当 Winusb.sys 作为设备的功能驱动程序安装时,应用程序可以使用这些功能与 Winusb.sys 通信。

对于不需要自定义功能驱动程序的设备,Winusb.sys 可作为功能驱动程序安装在设备的内核模式堆栈中。 然后,用户模式进程可通过使用一组设备 I/O 控制请求或调用 WinUSB 功能来与 Winusb.sys 通信。

下图显示了包含多个 Winusb.sys 实例的 USB 驱动程序堆栈。

按用户模式和内核模式划分的 WinUSB 驱动程序和设备对象堆栈的示意图。

上图显示了一个实现三个设备接口类的 WinUSB 配置示例,每个设备接口类都有一个已注册的设备接口:

  • Winusb.sys 实例 1 注册支持用户模式驱动程序 (Usboem.dll) 的设备接口 A。
  • Winusb.sys 的实例 2 注册了设备接口 B,它支持扫描仪的用户模式驱动程序 (Usbscan.exe),该驱动程序通过使用系统服务 (SVCHOST) 与 Winusb.dll 通信。
  • Winusb.sys 的实例 3 注册设备接口 C,该接口支持固件更新实用程序 (Usbfw.exe)。

只有一个已加载的 Winusb.sys 实例。 物理设备对象 (PDO) 可以代表非复合设备(图中的实例 1),也可以代表复合设备上的接口或接口集合(图中的实例 2 和 3)。 对于 USB 无线移动通信设备类 (WMCDC) 设备,一个 PDO 甚至可以代表多个接口集合。 (有关 WMCDC 设备 PDO 的更多信息,请参阅支持无线移动通信设备类。)

任何用户模式应用程序都可以通过加载 WinUSB 动态链接库 (Winusb.dll) 和调用该模块提供的 WinUSB 功能来与 USB 栈通信。