共用方式為


usb.h) _URB_CONTROL_TRANSFER_EX 結構 (

USB 用戶端驅動程式會使用 _URB_CONTROL_TRANSFER_EX 結構,將數據傳送至控制管道或從控制管道傳送數據,並具有限制可接受的傳輸時間的逾時。

語法

struct _URB_CONTROL_TRANSFER_EX {
  struct _URB_HEADER   Hdr;
  USBD_PIPE_HANDLE     PipeHandle;
  ULONG                TransferFlags;
  ULONG                TransferBufferLength;
  PVOID                TransferBuffer;
  PMDL                 TransferBufferMDL;
  ULONG                Timeout;
  ULONG                Pad;
  struct _URB_HCD_AREA hca;
  UCHAR                SetupPacket[8];
};

成員

Hdr

指定 URB 標頭資訊的 _URB_HEADER 結構的指標。 Hdr.Function 必須是 URB_FUNCTION_CONTROL_TRANSFER_EX, 而 Hdr.Length 必須是 sizeof(_URB_CONTROL_TRANSFER_EX)

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
設定為從裝置要求數據。 若要將數據傳送至裝置,此旗標必須清楚。
USBD_TRANSFER_DIRECTION_OUT
設定為將數據傳送至裝置。 設定此旗標相當於清除USBD_TRANSFER_DIRECTION_IN旗標。
USBD_SHORT_TRANSFER_OK
設定為指示主機控制器不會在從裝置收到比端點最大封包大小短的封包時傳回錯誤。 端點的封包大小上限會在 USB_DEVICE_DESCRIPTOR預設控制端點 (裝置描述) 元 (的 bMaxPacketSize0 成員中報告。 對於非預設控制端點,封包大小上限是在USB_ENDPOINT_DESCRIPTOR結構的 wMaxPacketSize 成員中設定, (端點描述元) 。

當主機控制器收到長度比控制端點上的 wMaxPacketSize 值短的封包時,行為會依主機控制器的類型而定:

  • 在 EHCI 主機控制器上,主機控制器會立即繼續進入控制傳輸的狀態階段。 不論是否已設定USBD_SHORT_TRANSFER_OK,傳輸都會順利完成。
  • 在UHCI和 OHCI 主機控制器上,如果已設定USBD_SHORT_TRANSFER_OK,主機控制器會繼續進行狀態階段。 如果未設定USBD_SHORT_TRANSFER_OK,主控制器會放棄控制傳輸的數據和狀態階段,而傳輸會完成並出現錯誤。
USBD_DEFAULT_PIPE_TRANSFER
設定為指示主控制器在預設控制管道上執行控制項傳輸。 這可讓呼叫端將命令傳送至預設控制管道,而不需明確指定管道句柄。

TransferBufferLength

指定 TransferBuffer 中指定的緩衝區長度,以位元組為單位,或在 TransferBufferMDL 中描述。 主機控制器驅動程式會傳回傳送至這個成員中管道或從管道讀取的位元組數目。

TransferBuffer

傳送之駐留緩衝區的指標,如果 TransferBufferMDL 中提供 MDL,則為 NULL。 此緩衝區的內容取決於 TransferFlags 的值。 如果指定USBD_TRANSFER_DIRECTION_IN,此緩衝區將會包含從主機控制器驅動程式傳回時從裝置讀取的數據。 否則,此緩衝區會包含驅動程式提供的數據,以便傳送至裝置。

TransferBufferMDL

描述駐留緩衝區的 MDL 指標,如果在 TransferBuffer 中提供緩衝區,則為 NULL。 緩衝區的內容取決於 TransferFlags 的值。 如果指定USBD_TRANSFER_DIRECTION_IN,描述的緩衝區將會包含從裝置讀取的數據,以從主機控制器驅動程式傳回。 否則,緩衝區會包含驅動程式提供的數據傳輸至裝置的數據。 此 MDL 必須從非分頁集區配置。

Timeout

表示 URB 逾時之前的時間,以毫秒為單位。值為 0 表示此 URB 沒有逾時。

Pad

保留的。 請勿使用。

hca

保留的。 請勿使用。

SetupPacket[8]

指定 USB 定義的要求安裝封包。 USB 要求安裝封包的格式可在 USB 核心規格中找到。

備註

此 URB 結構與 _URB_CONTROL_TRANSFER相同,不同之處在於 Timeout 成員會為 URB 建立逾時。

此結構的保留成員必須視為不透明,並保留供系統使用。

規格需求

需求
最低支援的用戶端 可在 Windows Vista 和更新版本的作業系統中使用。
標頭 usb.h (包含 Usb.h)

另請參閱

URB

USB 結構

_URB_CONTROL_TRANSFER

_URB_HEADER