_URB_BULK_OR_INTERRUPT_TRANSFER構造体 (usb.h)

_URB_BULK_OR_INTERRUPT_TRANSFER構造は、USB クライアント ドライバーが一括パイプまたは割り込みパイプでデータを送受信するために使用されます。

構文

struct _URB_BULK_OR_INTERRUPT_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;
};

メンバー

Hdr

URB ヘッダー情報を指定する _URB_HEADER 構造体へのポインター。 Hdr.Function をURB_FUNCTION_BULK_OR_INTERRUPT_TRANSFERし、 Hdr.Length を に設定する sizeof(_URB_BULK_OR_INTERRUPT_TRANSFER)必要があります。

PipeHandle

バルク パイプまたは割り込みパイプへの不透明なハンドルを指定します。 ホスト コントローラー ドライバーは、クライアント ドライバーが URB_FUNCTION_SELECT_CONFIGURATION 型の URB を持つデバイス構成を選択したとき、またはクライアント ドライバーが 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_ENDPOINT_DESCRIPTOR構造体 (エンドポイント記述子) の wMaxPacketSize メンバーで報告されます。 ホスト コントローラーが一括または割り込みエンドポイントで wMaxPacketSize よりも短いパケットを受信すると、ホスト コントローラーは直ちにエンドポイントからのデータの要求を停止し、転送を完了します。 USBD_SHORT_TRANSFER_OK フラグが設定されていない場合、ホスト コントローラーはエラーで転送を完了します。

USBD_TRANSFER_DIRECTION_INも設定されていない限り、このフラグを設定しないでください。 メモ EHCI ホスト コントローラーでは、一括エンドポイントと割り込みエンドポイントのUSBD_SHORT_TRANSFER_OKは無視されます。 EHCI コントローラーで短いパケットを転送しても、エラー状態になりません。

UHCI および OHCI ホスト コントローラーで、一括転送または割り込み転送にUSBD_SHORT_TRANSFER_OKが設定されていない場合、短いパケット転送がエンドポイントを停止し、転送に対してエラー コードが返されます。 クライアント ドライバーは、エンドポイントに転送要求を送信する前に、URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL要求を送信してエンドポイントを再開する必要があります。

TransferBufferLength

TransferBuffer またはTransferBufferMDL で説明されているバッファーの長さをバイト単位で指定します。 ホスト コントローラー ドライバーは、このメンバーのパイプに送信またはパイプから読み取られたバイト数を返します。

TransferBuffer

転送用の常駐バッファーへのポインター。MDL が TransferBufferMDL で指定されている場合は NULL です。 このバッファーの内容は、 TransferFlags の値によって異なります。 USBD_TRANSFER_DIRECTION_INが指定されている場合、このバッファーには、ホスト コントローラー ドライバーからの復帰時にデバイスから読み取られたデータが含まれます。 それ以外の場合、このバッファーには、デバイスへの転送用のドライバーから提供されたデータが含まれます。

TransferBufferMDL

常駐バッファーを記述する MDL へのポインター。バッファーが TransferBuffer で指定されている場合は NULL です。 バッファーの内容は、 TransferFlags の値によって異なります。 USBD_TRANSFER_DIRECTION_INが指定されている場合、記述されたバッファーには、ホスト コントローラー ドライバーから返されたデバイスから読み取られたデータが含まれます。 それ以外の場合、バッファーには、デバイスへの転送用のドライバーから提供されたデータが含まれます。 この MDL は、非ページ プールから割り当てる必要があります。

UrbLink

予約済み。 使用しないでください。

hca

予約済み。 使用しないでください。

注釈

ドライバーは 、UsbBuildInterruptOrBulkTransferRequest サービス ルーチンを使用して、この URB を書式設定できます。 TransferBuffer で指定されたバッファー、または TransferBufferMDL で説明されているバッファーは、ページ不可能である必要があります。

URB では、TransferBuffer パラメーターと TransferBufferMDL パラメーターの両方に NULL 以外の値を同時に指定できます。 その場合、転送バッファーと MDL が TransferBufferTransferBufferMDL を指している場合は、同じバッファーを指す必要があります。

USB バス ドライバーは、DISPATCH_LEVELでこの URB を処理します。

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

要件

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

こちらもご覧ください

Urb

USB 構造体

_URB_HEADER