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旗標。 |
|
設定為指示主機控制器不會在從裝置收到比端點最大封包大小短的封包時傳回錯誤。 端點的封包大小上限會在端點描述元) ( 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 中, TransferBuffer 和 TransferBufferMDL 參數都可以同時為非 NULL 值。 在此情況下,傳送緩衝區和指向 TransferBuffer 和 TransferBufferMDL 的 MDL 必須指向相同的緩衝區。
USB 總線驅動程式會在 DISPATCH_LEVEL處理此 URB。
此結構的保留成員必須視為不透明,並保留供系統使用。
規格需求
需求 | 值 |
---|---|
標頭 | usb.h (包含 Usb.h) |