_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_FUNCTION_SELECT_INTERFACE 型の URB を持つインターフェイスの設定を変更すると、このハンドルを返します。
TransferFlags
0、1、または次のフラグの組み合わせを指定します。
値 | 意味 |
---|---|
|
デバイスからデータを要求するように設定されます。 デバイスにデータを転送するには、このフラグをクリアする必要があります。 |
|
デバイスにデータを転送するように設定されます。 このフラグを設定することは、USBD_TRANSFER_DIRECTION_IN フラグをクリアすることと同じです。 |
|
エンドポイントの最大パケット サイズより短いパケットをデバイスから受信したときに、ホスト コントローラーがエラーを返さないように設定します。 エンドポイントの最大パケット サイズは、既定の制御エンドポイントのUSB_DEVICE_DESCRIPTOR構造体 (デバイス記述子) の bMaxPacketSize0 メンバーで報告されます。 既定以外の制御エンドポイントの場合、最大パケット サイズは、USB_ENDPOINT_DESCRIPTOR構造体 (エンドポイント記述子) の wMaxPacketSize メンバーで設定されます。
ホスト コントローラーが、コントロール エンドポイントの 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と同じですが、[タイムアウト] フィールドにタイムアウト値が提供される点が除きます。
この構造体の予約済みメンバーは不透明として扱う必要があり、システム使用のために予約されています。
要件
要件 | 値 |
---|---|
Header | usb.h (Usb.h を含む) |