_URB_CONTROL_VENDOR_OR_CLASS_REQUEST結構 (usb.h)

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 定義安裝封包的一部分。 此值是由 要求中使用的程式碼建立者所定義。

Index

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

Reserved1

保留的。 請勿使用。

備註

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

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

規格需求

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

另請參閱

URB

USB 結構

_URB_HEADER