共用方式為


usb.h) (_URB_CONTROL_VENDOR_OR_CLASS_REQUEST 結構

USB 用戶端驅動程式會使用 _URB_CONTROL_VENDOR_OR_CLASS_REQUEST 結構,對裝置、介面、連接點或其他裝置定義的目標發出廠商或類別特定的命令。

語法

struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST {
  struct _URB_HEADER   Hdr;
  PVOID                Reserved;
  ULONG                TransferFlags;
  ULONG                TransferBufferLength;
  PVOID                TransferBuffer;
  PMDL                 TransferBufferMDL;
  struct _URB          *UrbLink;
  struct _URB_HCD_AREA hca;
  UCHAR                RequestTypeReservedBits;
  UCHAR                Request;
  USHORT               Value;
  USHORT               Index;
  USHORT               Reserved1;
};

成員

Hdr

指定 URB 標頭資訊的 _URB_HEADER 結構的指標。 Hdr.Function 必須是其中一個URB_FUNCTION_CLASS_XXX或URB_FUNCTION_VENDOR_XXX GET_STATUS, 而 Hdr.Length 必須是 sizeof(_URB_CONTROL_VENDOR_OR_CLASS_REQUEST)

Reserved

TransferFlags

指定零、一或下列旗標的組合:

意義
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_TRANSFER_DIRECTION_IN,否則不應該設定此旗標。

TransferBufferLength

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

TransferBuffer

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

TransferBufferMDL

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

UrbLink

保留的。 請勿使用。

hca

保留的。 請勿使用。

RequestTypeReservedBits

保留的。 請勿使用。

Request

指定裝置、介面、連接點或其他裝置定義目標的 USB 或廠商定義要求碼。

Value

指定 「 要求」特有的值,這個值會成為目標USB定義設定封包的一部分。 此值是由 Request 中使用的程式代碼建立者所定義。

Index

如果要求適用於端點或介面,則指定由成功組態要求傳回的裝置定義索引。 否則, Index 必須是零。

Reserved1

保留的。 請勿使用。

備註

驅動程式可以使用 UsbBuildVendorRequest 服務例程格式此 URB。

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

規格需求

需求
標頭 usb.h (包含 Usb.h)

另請參閱

URB

USB 結構

_URB_HEADER