_URB_CONTROL_TRANSFER结构(usb.h)

USB 客户端驱动程序使用 _URB_CONTROL_TRANSFER 结构将数据传输到控制管道或从控制管道传输数据。

语法

struct _URB_CONTROL_TRANSFER {
  struct _URB_HEADER   Hdr;
  USBD_PIPE_HANDLE     PipeHandle;
  ULONG                TransferFlags;
  ULONG                TransferBufferLength;
  PVOID                TransferBuffer;
  PMDL                 TransferBufferMDL;
  struct _URB          *UrbLink;
  struct _URB_HCD_AREA hca;
  UCHAR                SetupPacket[8];
};

成员

Hdr

指向指定 URB 标头信息的 _URB_HEADER 结构的指针。 Hdr.Function 必须URB_FUNCTION_CONTROL_TRANSFER,Hdr.Length 必须 sizeof(_URB_CONTROL_TRANSFER)

PipeHandle

控制管道的句柄。

如果目标是默认控制终结点,则必须 NULLPipeHandle。 在这种情况下,TransferFlags 必须包含USBD_DEFAULT_PIPE_TRANSFER标志。

如果目标为非默认控制终结点,PipeHandle 指定控制管道的不透明句柄。 当客户端驱动程序使用类型为 URB_FUNCTION_SELECT_CONFIGURATION 的 URB 选择设备配置时,或者当客户端驱动程序更改具有类型为 URB_FUNCTION_SELECT_INTERFACE 的 URB 的接口的设置时,主机控制器驱动程序将返回此句柄。

TransferFlags

指定以下标志的零、一个或组合:

价值 意义
USBD_TRANSFER_DIRECTION_IN
设置为从设备请求数据。 若要将数据传输到设备,必须清除此标志。
USBD_TRANSFER_DIRECTION_OUT
设置为将数据传输到设备。 设置此标志等效于清除USBD_TRANSFER_DIRECTION_IN标志。
USBD_SHORT_TRANSFER_OK
设置为指示主机控制器在从设备收到小于终结点最大数据包大小的数据包时不返回错误。 终结点的最大数据包大小在默认控制终结点 USB_DEVICE_DESCRIPTOR 结构(设备描述符)bMaxPacketSize0 成员中报告。 对于非默认控制终结点,wMaxPacketSizeUSB_ENDPOINT_DESCRIPTOR 结构(终结点描述符)的成员中设置最大数据包大小。

当主机控制器收到长度小于控制终结点上的 wMaxPacketSize 值的数据包时,行为将如下所示,具体取决于主机控制器的类型:

  • 在 EHCI 主机控制器上,主机控制器会立即进入控制传输的状态阶段。 无论是否已设置USBD_SHORT_TRANSFER_OK,传输都成功完成。
  • 在 UHCI 和 OHCI 主机控制器上,如果设置了USBD_SHORT_TRANSFER_OK,主机控制器将转到状态阶段。 如果未设置USBD_SHORT_TRANSFER_OK,主机控制器将放弃控制传输的数据和状态阶段,传输完成并显示错误。
USBD_DEFAULT_PIPE_TRANSFER
设置为指示主机控制器在默认控制管道上执行控制传输。 这样,调用方就可以将命令发送到默认控制管道,而无需显式指定管道句柄。

TransferBufferLength

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

TransferBuffer

指向传输的常驻缓冲区的指针;如果 MDL 在 transferBufferMDL中提供,则为 NULL null。 此缓冲区的内容取决于 TransferFlags的值。 如果指定USBD_TRANSFER_DIRECTION_IN,则此缓冲区将包含从主机控制器驱动程序返回时从设备读取的数据。 否则,此缓冲区包含用于传输到设备的驱动程序提供的数据。

TransferBufferMDL

指向描述常驻缓冲区的 MDL 的指针;如果缓冲区 在 transferBuffer中提供缓冲区,则为 NULL NULL。 缓冲区的内容取决于 TransferFlags的值。 如果指定了USBD_TRANSFER_DIRECTION_IN,则描述的缓冲区将包含从主机控制器驱动程序返回时从设备读取的数据。 否则,缓冲区包含用于传输到设备的驱动程序提供的数据。 必须从非分页池分配此 MDL。

UrbLink

保留。 请勿使用。

hca

保留。 请勿使用。

SetupPacket[8]

指定 USB 定义的请求设置数据包。 USB 请求设置数据包的格式位于 USB 核心规范中。

言论

URB_CONTROL_TRANSFER_EX 结构与 URB_CONTROL_TRANSFER相同,只是它在 超时 字段中提供超时值。

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

要求

要求 价值
标头 usb.h (包括 Usb.h)

另请参阅

URB

URB_CONTROL_TRANSFER_EX

USB 结构

_URB_HEADER