_URB_CONTROL_DESCRIPTOR_REQUEST 结构 (usb.h)

USB 客户端驱动程序使用 _URB_CONTROL_DESCRIPTOR_REQUEST 结构在 USB 设备上获取或设置描述符。

语法

struct _URB_CONTROL_DESCRIPTOR_REQUEST {
  struct _URB_HEADER   Hdr;
  PVOID                Reserved;
  ULONG                Reserved0;
  ULONG                TransferBufferLength;
  PVOID                TransferBuffer;
  PMDL                 TransferBufferMDL;
  struct _URB          *UrbLink;
  struct _URB_HCD_AREA hca;
  USHORT               Reserved1;
  UCHAR                Index;
  UCHAR                DescriptorType;
  USHORT               LanguageId;
  USHORT               Reserved2;
};

成员

Hdr

指向指定 URB 标头信息的 _URB_HEADER 结构的指针。 Hdr.Function 必须是以下项之一:

Hdr.Length 必须等于 sizeof(_URB_CONTROL_DESCRIPTOR_REQUEST)

Reserved

保留。 请勿使用。

Reserved0

保留。 请勿使用。

TransferBufferLength

指定 TransferBuffer 中指定的缓冲区或 TransferBufferMDL 中所述的缓冲区的长度(以字节为单位)。 主控制器驱动程序返回在此成员的管道中发送到管道或从管道读取的字节数。

TransferBuffer

指向传输的常驻缓冲区的指针;如果在 TransferBufferMDL 中提供了 MDL,则为 NULL

TransferBufferMDL

指向描述常驻缓冲区的 MDL 的指针;如果 TransferBuffer 中提供了缓冲区,则为 NULL。 必须从非分页池中分配此 MDL。

UrbLink

保留。 请勿使用。

hca

保留。 请勿使用。

Reserved1

保留。 请勿使用。

Index

指定要检索或设置的描述符的设备定义的索引。

DescriptorType

指示正在检索或设置的描述符的类型。 必须指定以下值之一:

usbspec.h 常量 USB 版本
USB_DEVICE_DESCRIPTOR_TYPE 0x01 USB 1.1
USB_CONFIGURATION_DESCRIPTOR_TYPE 0x02 USB 1.1
USB_STRING_DESCRIPTOR_TYPE 0x03 USB 1.1
USB_INTERFACE_DESCRIPTOR_TYPE 0x04 USB 1.1
USB_ENDPOINT_DESCRIPTOR_TYPE 0x05 USB 1.1
USB_DEVICE_QUALIFIER_DESCRIPTOR_TYPE 0x06 USB 2.0
USB_OTHER_SPEED_CONFIGURATION_DESCRIPTOR_TYPE 0x07 USB 2.0
USB_INTERFACE_POWER_DESCRIPTOR_TYPE 0x08 USB 2.0
USB_OTG_DESCRIPTOR_TYPE 0x09 USB 3.0
USB_DEBUG_DESCRIPTOR_TYPE 0x0a USB 3.0
USB_INTERFACE_ASSOCIATION_DESCRIPTOR_TYPE 0x0b USB 3.0
USB_BOS_DESCRIPTOR_TYPE 0x0f USB 3.0
USB_DEVICE_CAPABILITY_DESCRIPTOR_TYPE 0x10 USB 3.0
USB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR_TYPE 0x30 USB 3.0
USB_20_HUB_DESCRIPTOR_TYPE 0x29 USB 1.1
USB 2.0
USB_30_HUB_DESCRIPTOR_TYPE 0x2a USB 3.0
USB_SUPERSPEEDPLUS_ISOCH_ENDPOINT_COMPANION_DESCRIPTOR_TYPE 0x31 USB 3.1

LanguageId

指定在 DescriptorType 中设置USB_STRING_DESCRIPTOR_TYPE时要检索 的描述符的语言 ID。 对于 DescriptorType 中的任何其他值,此成员必须设置为零。

Reserved2

保留。 请勿使用。

注解

驱动程序可以使用 UsbBuildGetDescriptorRequest 服务例程来格式化此 URB。 如果调用方传递的缓冲区太小而无法保存所有数据,则总线驱动程序会截断数据,使其适合缓冲区中,而不会出错。

当调用方请求设备描述符时,总线驱动程序将返回 USB_DEVICE_DESCRIPTOR 数据结构。

当调用方请求配置描述符时,总线驱动程序以 USB_CONFIGURATION_DESCRIPTOR 结构返回配置描述符,后跟该配置的接口和终结点描述符。 驱动程序可以访问接口和终结点描述符作为 USB_INTERFACE_DESCRIPTORUSB_ENDPOINT_DESCRIPTOR 结构。 总线驱动程序还会返回任何特定于类或特定于设备的描述符。 系统提供 USBD_ParseConfigurationDescriptorExUSBD_ParseDescriptors 服务例程来查找缓冲区中的单个描述符。

当调用方请求字符串描述符时,总线驱动程序将返回 USB_STRING_DESCRIPTOR 结构。 字符串本身位于字符串描述符的可变长度 bString 成员中。

此结构的保留成员必须被视为不透明成员,并保留供系统使用。

要求

要求
Header usb.h (包括 Usb.h)

另请参阅

URB

USB 结构

USB_CONFIGURATION_DESCRIPTOR

USB_DEVICE_DESCRIPTOR

USB_ENDPOINT_DESCRIPTOR

USB_INTERFACE_DESCRIPTOR

USB_STRING_DESCRIPTOR

_URB_HEADER