USB 复合设备的枚举

当新的 USB 设备连接到主机时,USB 总线驱动程序将为设备创建物理设备对象(PDO),并生成 PnP 事件来报告新的 PDO。 然后,操作系统查询与 PDO 关联的硬件 ID 的总线驱动程序。

对于所有 USB 设备,USB 总线驱动程序报告采用 以下格式的设备 ID

USB\VID_xxxx&PID_yyyy

xxxx 和 yyy 值分别取自设备描述符的 idVendoridProduct 字段。

如果设备满足以下要求,则总线驱动程序还会报告兼容的标识符(ID USB\COMPOSITE):

  • 设备描述符(bDeviceClass)的设备类字段必须包含一个值为零,或者设备描述符的类(bDeviceClass)、子类(bDeviceSubClass)和协议(bDeviceProtocol)字段必须分别具有值0xEF、0x02和0x01,如 USB 接口关联描述符中所述

  • 设备必须具有多个接口。

  • 设备必须具有单个配置。

总线驱动程序还会检查设备描述符的设备类(bDeviceClass)、子类(bDeviceSubClass)和协议(bDeviceProtocol)字段。 如果这些字段为零,则设备是复合设备,总线驱动程序报告 PDO 的 USB\COMPOSITE 的额外兼容标识符(ID)。

在总线驱动程序检索新 PDO 的硬件和兼容 ID 后,操作系统将搜索 INF 文件。 如果其中一个 INF 文件包含设备 ID 的匹配项,Windows 将加载该驱动程序和通用父驱动程序不会发挥作用。 如果没有 INF 文件包含设备 ID,并且 PDO 具有兼容的 ID,Windows 将搜索兼容的 ID。 此搜索在 Usb.inf 中生成匹配项,并导致操作系统加载 USB 通用父驱动程序(Usbccgp.sys)。

如果设备没有生成 USB\COMPOSITE 兼容 ID 的特征,则必须提供加载通用父驱动程序的 INF 文件。 INF 文件应包含引用 Usb.inf 的需要/包含部分。

如果复合设备具有多个配置,则提供的 INF 文件必须指定通用父级应在注册表中使用的配置。 配置Usbccgp.sys以选择非默认 USB 配置中介绍了必要的注册表项。