USB 要求ブロック (URB)

この記事では、USB 要求ブロック (URB) について説明し、USB クライアント ドライバーが Windows ドライバー モデル (WDM) ルーチンを使用して URB を USB ドライバー スタックに割り当て、ビルドし、送信する方法について説明します。

ユニバーサル シリアル バス (USB) クライアント ドライバーは、対応するデバイスと直接通信できません。 代わりに、クライアント ドライバーは要求を作成し、処理のために USB ドライバー スタックに送信します。 各要求内で、クライアント ドライバーは USB 要求ブロック (URB) と呼ばれる可変長データ構造を提供します。 URB 構造体には、要求の詳細が記述され、完了した要求の状態に関する情報も含まれます。 クライアント ドライバーでは、データ転送を含め、すべてのデバイス固有の操作が URB 経由で実行されます。 クライアント ドライバーでは、要求を USB ドライバー スタックに送信する前に、要求に関する情報を使用して URB を初期化する必要があります。 特定の種類の要求について、Microsoft では、ヘルパー ルーチンとマクロを提供しています。これらは、URB 構造体を割り当て、URB 構造体の必要なメンバーに、クライアント ドライバーから提供される詳細情報を設定します。

各 URB は、要求された操作の種類の識別を目的とした標準の固定サイズのヘッダー (_URB_HEADER) で始まります。 _URB_HEADERLength メンバーは、URB のサイズをバイト単位で指定します。 Function メンバーは、システムで定義された一連の URB_FUNCTION_XXX 定数のいずれかである必要があり、要求される操作の種類を特定します。 たとえば、データ転送の場合、このメンバーは転送の種類を示します。 ファンクション コード URB_FUNCTION_CONTROL_TRANSFER、URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER、URB_FUNCTION_ISOCH_TRANSFER はそれぞれ、制御転送、一括/割り込み転送、およびアイソクロナス転送を示します。 USB ドライバー スタックは、Status メンバーを使用して、USB 固有の状態コードを返します。

URB を送信するために、クライアント ドライバーは IOCTL_INTERNAL_USB_SUBMIT_URB 要求を使用します。この要求は、IRP_MJ_INTERNAL_DEVICE_CONTROL 型の I/O 要求パケット (IRP) によってデバイスに配信されます。

USB ドライバー スタックが URB の処理を完了すると、ドライバー スタックは URB 構造体の Status メンバーを使用して、USB 固有の状態コードを返します。

Note

KMDF ドライバーと UMDF ドライバー開発者は、USB デバイスとの通信に、それぞれのフレームワーク インターフェイスを使用する必要があります。 詳細については、「USB デバイスの使用」(KMDF ドライバー) および「UMDF ドライバーでの USB インターフェイスの操作」を参照してください。 これらのトピックでは、USB デバイス通信の基盤として使用される WDM ドライバー インターフェイスについて説明しています。

このセクションの内容

トピック 説明
URB の割り当てと構築 このトピックでは、Microsoft 提供の USB ドライバー スタックに要求を送信する前に、USB クライアント ドライバーが Windows Driver Model (WDM) ドライバー ルーチンを使用して URB を割り当て、書式設定する方法について説明します。
URB の送信方法 このトピックでは、特定の要求を処理するために初期化された URB を USB ドライバー スタックに送信する手順について説明しています。
ベスト プラクティス: URB の使用 このトピックでは、Windows 8 に含まれる USB ドライバー スタックに URB を割り当て、ビルドし、送信する際のクライアント ドライバーのベスト プラクティスについて説明します。