_URB_CONTROL_TRANSFER_EX结构(usb.h)
USB 客户端驱动程序使用 _URB_CONTROL_TRANSFER_EX 结构将数据传输到控制管道或从控制管道传输数据,超时会限制可接受的传输时间。
语法
struct _URB_CONTROL_TRANSFER_EX {
struct _URB_HEADER Hdr;
USBD_PIPE_HANDLE PipeHandle;
ULONG TransferFlags;
ULONG TransferBufferLength;
PVOID TransferBuffer;
PMDL TransferBufferMDL;
ULONG Timeout;
ULONG Pad;
struct _URB_HCD_AREA hca;
UCHAR SetupPacket[8];
};
成员
Hdr
指向指定 URB 标头信息的 _URB_HEADER 结构的指针。
Hdr.Function 必须URB_FUNCTION_CONTROL_TRANSFER_EX,Hdr.Length 必须 sizeof(_URB_CONTROL_TRANSFER_EX)
。
PipeHandle
管道的句柄。
如果目标是默认控制终结点,则必须 NULLPipeHandle。 在这种情况下,TransferFlags 必须包含USBD_DEFAULT_PIPE_TRANSFER标志。
如果目标为非默认控制终结点,PipeHandle 指定控制管道的不透明句柄。 当客户端驱动程序使用类型为 URB_FUNCTION_SELECT_CONFIGURATION 的 URB 选择设备配置时,或者当客户端驱动程序更改具有类型为 URB_FUNCTION_SELECT_INTERFACE 的 URB 的接口的设置时,主机控制器驱动程序将返回此句柄。
TransferFlags
指定以下标志的零、一个或组合:
价值 | 意义 |
---|---|
|
设置为从设备请求数据。 若要将数据传输到设备,必须清除此标志。 |
|
设置为将数据传输到设备。 设置此标志等效于清除USBD_TRANSFER_DIRECTION_IN标志。 |
|
设置为指示主机控制器在从设备收到小于终结点最大数据包大小的数据包时不返回错误。 终结点的最大数据包大小在默认控制终结点 USB_DEVICE_DESCRIPTOR 结构(设备描述符)bMaxPacketSize0 成员中报告。 对于非默认控制终结点,wMaxPacketSizeUSB_ENDPOINT_DESCRIPTOR 结构(终结点描述符)的成员中设置最大数据包大小。
当主机控制器收到长度小于控制终结点上的 wMaxPacketSize 值的数据包时,行为将如下所示,具体取决于主机控制器的类型:
|
|
设置为指示主机控制器在默认控制管道上执行控制传输。 这样,调用方就可以将命令发送到默认控制管道,而无需显式指定管道句柄。 |
TransferBufferLength
指定 TransferBuffer 中指定的缓冲区的长度(以字节为单位)或 TransferBufferMDL中所述。 主机控制器驱动程序返回在此成员的管道中发送到管道或从管道读取的字节数。
TransferBuffer
指向传输的常驻缓冲区的指针;如果 MDL 在 transferBufferMDL中提供,则为 NULL null。 此缓冲区的内容取决于 TransferFlags的值。 如果指定USBD_TRANSFER_DIRECTION_IN,则此缓冲区将包含从主机控制器驱动程序返回时从设备读取的数据。 否则,此缓冲区包含用于传输到设备的驱动程序提供的数据。
TransferBufferMDL
指向描述常驻缓冲区的 MDL 的指针;如果缓冲区 在 transferBuffer中提供缓冲区,则为 NULL NULL。 缓冲区的内容取决于 TransferFlags的值。 如果指定了USBD_TRANSFER_DIRECTION_IN,则描述的缓冲区将包含从主机控制器驱动程序返回时从设备读取的数据。 否则,缓冲区包含用于传输到设备的驱动程序提供的数据。 必须从非分页池分配此 MDL。
Timeout
指示 URB 超时前的时间(以毫秒为单位)。值为 0 表示此 URB 没有超时。
Pad
保留。 请勿使用。
hca
保留。 请勿使用。
SetupPacket[8]
指定 USB 定义的请求设置数据包。 USB 请求设置数据包的格式位于 USB 核心规范中。
言论
此 URB 结构与 _URB_CONTROL_TRANSFER相同,只是 超时 成员为 URB 建立超时。
此结构的保留成员必须被视为不透明,并保留供系统使用。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | 在 Windows Vista 和更高版本的作系统中可用。 |
标头 | usb.h (包括 Usb.h) |