_URB_BULK_OR_INTERRUPT_TRANSFER结构(usb.h)

USB 客户端驱动程序使用 _URB_BULK_OR_INTERRUPT_TRANSFER 结构在大容量管道或中断管道上发送或接收数据。

语法

struct _URB_BULK_OR_INTERRUPT_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;
};

成员

Hdr

指向指定 URB 标头信息的 _URB_HEADER 结构的指针。 Hdr.Function 必须URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER,Hdr.Length 必须设置为 sizeof(_URB_BULK_OR_INTERRUPT_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
设置为指示主机控制器在从设备收到小于终结点最大数据包大小的数据包时不返回错误。 终结点的最大数据包大小在 wMaxPacketSizeUSB_ENDPOINT_DESCRIPTOR 结构(终结点描述符)中报告。 当主机控制器在批量或中断终结点上收到短于 wMaxPacketSize 的数据包时,主机控制器会立即停止从终结点请求数据并完成传输。 如果未设置USBD_SHORT_TRANSFER_OK标志,主机控制器将完成传输并显示错误。

除非还设置了USBD_TRANSFER_DIRECTION_IN,否则不应设置此标志。 注释 在 EHCI 主机控制器上,对于批量终结点和中断终结点,将忽略USBD_SHORT_TRANSFER_OK。 在 EHCI 控制器上传输短数据包不会导致错误情况。

在 UHCI 和 OHCI 主机控制器上,如果未为批量传输或中断传输设置USBD_SHORT_TRANSFER_OK,则短数据包传输会停止终结点,并返回传输的错误代码。 在向终结点提交传输请求之前,客户端驱动程序必须通过提交URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL请求来恢复终结点。

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

保留。 请勿使用。

言论

驱动程序可以使用 UsbBuildInterruptOrBulkTransferRequest 服务例程来设置此 URB 的格式。 TransferBuffer 中指定的缓冲区或 TransferBufferMDL 中所述的缓冲区必须是不可分页的。

URB中,TransferBufferTransferBufferMDL 参数都可以是非 NULL 值。 在这种情况下,传输缓冲区和 MDL 指向 TransferBufferTransferBufferMDL 必须指向同一缓冲区。

USB 总线驱动程序在DISPATCH_LEVEL处理此 URB。

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

要求

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

另请参阅

URB

USB 结构

_URB_HEADER