_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 型のデバイス構成を選択URB_FUNCTION_SELECT_CONFIGURATION場合、またはクライアント ドライバーが URB 型のインターフェイスの設定を変更URB_FUNCTION_SELECT_INTERFACE場合に、このハンドルを返します。

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 以外の値を同時に指定できます。 その場合、転送バッファーと、 TransferBuffer と TransferBufferMDL を指す MDL は、同じバッファーを指す必要があります。

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

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

要件

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

こちらもご覧ください

Urb

USB 構造体

_URB_HEADER