usb.h) (_URB_BULK_OR_INTERRUPT_TRANSFER 结构

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 类型为 URB_FUNCTION_SELECT_CONFIGURATION 的设备配置时,或者当客户端驱动程序更改 URB 类型为 URB_FUNCTION_SELECT_INTERFACE 的接口的设置时,主机控制器驱动程序将返回此句柄。

TransferFlags

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

含义
USBD_TRANSFER_DIRECTION_IN
设置为从设备请求数据。 若要将数据传输到设备,必须清除此标志。
USBD_TRANSFER_DIRECTION_OUT
设置为将数据传输到设备。 设置此标志等效于清除USBD_TRANSFER_DIRECTION_IN标志。
USBD_SHORT_TRANSFER_OK
设置为指示主机控制器在从设备收到小于终结点最大数据包大小的数据包时不返回错误。 终结点的最大数据包大小在 USB_ENDPOINT_DESCRIPTOR 结构的 wMaxPacketSize 成员中报告, (终结点描述符) 。 当主机控制器在批量或中断终结点上收到短于 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

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

TransferBufferMDL

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

UrbLink

保留。 请勿使用。

hca

保留。 请勿使用。

注解

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

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

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

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

要求

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

另请参阅

URB

USB 结构

_URB_HEADER