_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 が既定のコントロール エンドポイントの場合、 PipeHandleNULL である必要があります。 この場合、 TransferFlags には USBD_DEFAULT_PIPE_TRANSFER フラグが含まれている必要があります。

target が既定以外のコントロール エンドポイントの場合、 PipeHandle はコントロール パイプの不透明なハンドルを指定します。 ホスト コントローラー ドライバーは、クライアント ドライバーが URB の種類が URB_FUNCTION_SELECT_CONFIGURATIONのデバイス構成を選択したとき、またはクライアント ドライバーが URB_FUNCTION_SELECT_INTERFACE 型の URB を持つインターフェイスの設定を変更すると、このハンドルを返します。

TransferFlags

0、1、または次のフラグの組み合わせを指定します。

意味
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

転送の常駐バッファーへのポインター。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と同じですが、[タイムアウト] フィールドにタイムアウト値が提供される点が除きます。

この構造体の予約済みメンバーは不透明として扱う必要があり、システム使用のために予約されています。

要件

要件
Header usb.h (Usb.h を含む)

こちらもご覧ください

Urb

URB_CONTROL_TRANSFER_EX

USB 構造体

_URB_HEADER