枚举 USB 复合设备

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

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

USB\VID_xxxx&PID_yyyy

注意xxxxyyyy 分别直接取自设备描述符的 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 文件指示的驱动程序,并且通用父驱动程序不会发挥作用。 如果没有 INF 文件包含设备 ID,并且 PDO 具有兼容的 ID,则 Windows 将搜索兼容的 ID。 这会在 Usb.inf 中生成匹配项,并导致操作系统加载 USB 泛型父驱动程序 (Usbccgp.sys)

如果希望泛型父驱动程序管理设备,但设备没有确保系统生成 USB\COMPOSITE 兼容 ID 所需的特征,则必须提供加载泛型父驱动程序的 INF 文件。 INF 文件应包含引用 Usb.inf 的 needs/include 节。

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

USB 常规父驱动程序 (Usbccgp.sys)
Microsoft 提供的 USB 驱动程序