_URB_CONTROL_TRANSFER結構 (usb.h)
_URB_CONTROL_TRANSFER 結構是由 USB 用戶端驅動程式用來將數據傳送至控制管道或從控制管道傳送數據。
語法
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
控制管道的句柄。
如果 target 是預設控制端點,則 PipeHandle 必須 NULL。 在此情況下,TransferFlags 必須包含USBD_DEFAULT_PIPE_TRANSFER旗標。
如果 target 是非預設的控制端點,PipeHandle 會指定控制管道的不透明句柄。 當用戶端驅動程式選取具有類型為 URB 的裝置組態 URB_FUNCTION_SELECT_CONFIGURATION時,或當用戶端驅動程式變更具有類型為 URB 且類型為 URB_FUNCTION_SELECT_INTERFACE 的介面設定時,主機控制器驅動程式會傳回此句柄。
TransferFlags
指定下列旗標的零、一或組合:
價值 | 意義 |
---|---|
|
設定為向裝置要求數據。 若要將數據傳輸到裝置,此旗標必須清楚。 |
|
設定為將數據傳輸到裝置。 設定此旗標相當於清除USBD_TRANSFER_DIRECTION_IN旗標。 |
|
設定為指示主機控制器在從裝置收到比端點封包大小上限短的封包時,不要傳回錯誤。 端點的封包大小上限會在預設控制端點 USB_DEVICE_DESCRIPTOR 結構 (裝置描述元) 的 bMaxPacketSize0 成員中報告。 針對非預設控制端點,封包大小上限是在 wMaxPacketSizeUSB_ENDPOINT_DESCRIPTOR 結構的成員中設定的(端點描述元)。
當主機控制器收到長度比控制端點上的 wMaxPacketSize 值短的封包時,行為會依主機控制器的類型而定:
|
|
設定為指示主控制器在預設控制管道上執行控制項傳輸。 這可讓呼叫端將命令傳送至預設控制管道,而不需要明確指定管道句柄。 |
TransferBufferLength
指定 TransferBuffer 中指定的緩衝區長度,以位元組為單位,或 TransferBufferMDL中所述。 主機控制器驅動程式會傳回傳送至這個成員管道或從管道讀取的位元組數目。
TransferBuffer
傳送的常駐緩衝區指標,如果 MDL 是在 transferBufferMDL中提供,則為 NULL。 此緩衝區的內容取決於 TransferFlags的值。 如果指定USBD_TRANSFER_DIRECTION_IN,此緩衝區將會包含從主機控制器驅動程式傳回時從裝置讀取的數據。 否則,此緩衝區會包含驅動程式提供的數據,以傳送至裝置。
TransferBufferMDL
描述常駐緩衝區的 MDL 指標,如果 TransferBuffer中提供緩衝區,則為 NULL。 緩衝區的內容取決於 TransferFlags的值。 如果指定USBD_TRANSFER_DIRECTION_IN,描述的緩衝區將會包含從主機控制器驅動程式傳回時從裝置讀取的數據。 否則,緩衝區會包含驅動程式提供的數據傳輸至裝置。 此 MDL 必須從非分頁集區配置。
UrbLink
保留。 請勿使用。
hca
保留。 請勿使用。
SetupPacket[8]
指定 USB 定義的要求設定封包。 USB 要求設定封包的格式位於 USB 核心規格中。
言論
URB_CONTROL_TRANSFER_EX 結構與 URB_CONTROL_TRANSFER相同,不同之處在於它在 [Timeout] 字段中提供逾時值。
此結構的保留成員必須視為不透明,並保留供系統使用。
要求
要求 | 價值 |
---|---|
標頭 | usb.h (包括 Usb.h) |