WinUsb&windows兼容id
2025-08-11
0
0
Windows支持多种歉ID,兼容ID是 Windows 用来将设备与驱动程序包匹配的供应商定义的标识字符串.
USB设备支持Windows兼容ID的前提是USB版本号是否大于等于2.0,即bcdUSB大于等于0x0200。如果bcdUSB小于0x0200,则说明设备不支持,后续不会去请求 OS字符串描述符。
如果大于等于,说明设备有可能支持OS字符串描述符,会在下一步去获取index为0xee的OS字符串描述符。
OS字符串描述符的格式固定,总长度为18,字符串前面的内容为unicode编码的”MSFT100”,最一个字节是vendor code,由厂商自己定义。
如下图定义为0x55
系统获取了verdor code之后,会发送verdor请求
1字节 | 1字节 | 2字节 | 2字节 | 2字节 |
---|---|---|---|---|
bmRequestType(1) | bRequest(1) | wValue(2) | wIndex(2) | wLength(2) |
0xC0 | 供应商代码,例如0x55 | 0x0000 | 0x0004 | 0x0028 |
通过该请求获取OS扩展描述符内容如下:
值 | 类型 | 描述 |
---|---|---|
0x28, 0x00, 0x00, 0x00 | DWORD (LE) | Descriptor length (40 bytes) |
0x00, 0x01 | BCD WORD (LE) | Version (‘1.0’) |
0x04, 0x00 | WORD (LE) | Compatibility ID Descriptor index (0x0004) |
0x01 | BYTE | Number of sections (1) |
0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00 | 7 BYTES | Reserved |
0x00 | BYTE | Interface Number (Interface #0) |
0x01 | BYTE | Reserved |
0x57, 0x49, 0x4E, 0x55, 0x53, 0x42, 0x00, 0x00 | 8 BYTES | (NUL-terminated)ASCII String Compatible ID (“WINUSB\0\0”) |
0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00 | 8 BYTES | (NUL-terminated?)ASCII String Sub-Compatible ID(unused) |
0x00, 0x00, 0x00, 0x00,0x00, 0x00 | 6 BYTES | Reserved |
如这里返回的兼容id为winusb
HID人机交互QQ群:564808376
UAC音频QQ群:218581009
UVC相机QQ群:331552032
BOT&UASP大容量存储QQ群:258159197
STC-USB单片机QQ群:315457461
USB技术交流QQ群2:580684376
USB技术交流QQ群:952873936