USB 接口描述符
2021-05-09
16164
71
接口描述符一般是按设备的运行状态分类,这样设备可以在不同的接口中切换来实现设备运行状态的切换,如在设备在运行状态下使用正常的接口描述符,在停止状态下使用该接口描述符的备用接口描述符。
接口描述符的定义:
struct _INTERFACE_DESCRIPTOR_STRUCT
{
BYTE bLength; //设备描述符的字节数大小,为0x09
BYTE bDescriptorType; //描述符类型编号,为0x04
BYTE bInterfaceNumber; //接口的编号
BYTE bAlternateSetting;//备用的接口描述符编号
BYTE bNumEndpoints; //该接口使用端点数,不包括端点0
BYTE bInterfaceClass; //接口类型
BYTE bInterfaceSubClass;//接口子类型
BYTE bInterfaceProtocol;//接口所遵循的协议
BYTE iInterface; //描述该接口的字符串索引值
}INTERFACE_DESCRIPTOR_STRUCT
接口描述符的字段:
- bLength : 描述符大小.固定为0x09.
- bDescriptorType : 接口描述符类型.固定为0x04.
- bInterfaceNumber: 该接口的编号.
- bAlternateSetting : 用于为上一个字段选择可供替换的位置.即备用的接口描述符标号.
- bNumEndpoint : 使用的端点数目.端点0除外.
- bInterfaceClass : 类型代码(由USB分配).
- bInterfaceSubClass : 子类型代码(由USB分配).
- bInterfaceProtocol : 协议代码(由USB分配).
- iInterface : 字符串描述符的索引
Windbg显示接口描述符
2: kd> dt _USBD_INTERFACE_INFORMATION 0xffffdb8d`cf4e3c58
xxx!_USBD_INTERFACE_INFORMATION
+0x000 Length : 0x48
+0x002 InterfaceNumber : 0 ''
+0x003 AlternateSetting : 0x1 ''
+0x004 Class : 0xff ''
+0x005 SubClass : 0xf0 ''
+0x006 Protocol : 0x1 ''
+0x007 Reserved : 0 ''
+0x008 InterfaceHandle : 0xffffdb8d`c2d2f4f0 Void
+0x010 NumberOfPipes : 2
+0x018 Pipes : [1] _USBD_PIPE_INFORMATION
某USB移动硬盘的接口描述符
===>Interface Descriptor<===
bLength: 0x09
bDescriptorType: 0x04
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x08 -> This is a Mass Storage USB Device Interface Class
bInterfaceSubClass: 0x06
bInterfaceProtocol: 0x50
iInterface: 0x00
...
===>Interface Descriptor<===
bLength: 0x09
bDescriptorType: 0x04
bInterfaceNumber: 0x00
bAlternateSetting: 0x01 //接口0的备份接口描述符
bNumEndpoints: 0x04
bInterfaceClass: 0x08 -> This is a Mass Storage USB Device Interface Class
bInterfaceSubClass: 0x06
bInterfaceProtocol: 0x62
iInterface: 0x00
HID人机交互QQ群:564808376
UAC音频QQ群:218581009
UVC相机QQ群:331552032
BOT&UASP大容量存储QQ群:258159197
STC-USB单片机QQ群:315457461
USB技术交流QQ群2:580684376
USB技术交流QQ群:952873936