この記事では、USB 要求ブロック (URB) について説明し、USB クライアント ドライバーが Windows ドライバー モデル (WDM) ルーチンを使用して、USB ドライバー スタックに URL を割り当て、ビルドし、送信する方法について説明します。
ユニバーサル シリアル バス (USB) クライアント ドライバーは、そのデバイスと直接通信できません。 代わりに、クライアント ドライバーは要求を作成し、処理のために USB ドライバー スタックに送信します。 各要求内で、クライアント ドライバーは USB 要求ブロック (URB) と呼ばれる可変長データ構造を提供します。 URB 構造体は、要求の詳細を記述し、完了した要求の状態に関する情報も含みます。 クライアント ドライバーは、データ転送を含め、すべてのデバイス固有の操作を URB 経由で実行します。 クライアント ドライバーは、USB ドライバー スタックに送信する前に、要求に関する情報を使用して URB を初期化する必要があります。 特定の種類の要求について、Microsoft は、 URB 構造体を割り当て、 URB 構造体の必要なメンバーにクライアント ドライバーによって提供される詳細を入力するヘルパー ルーチンとマクロを提供します。
各 URB は、要求された操作の種類を識別することを目的とする標準の固定サイズのヘッダー (_URB_HEADER) で始まります。 _URB_HEADERの Length メンバーは、URB のサイズをバイト単位で指定します。 Function メンバーは、一連のシステム定義URB_FUNCTION_XXX定数のいずれかである必要があり、要求される操作の種類を決定します。 たとえば、データ転送の場合、このメンバーは転送の種類を示します。 関数コードURB_FUNCTION_CONTROL_TRANSFER、URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER、およびURB_FUNCTION_ISOCH_TRANSFERは、それぞれ制御、バルク/割り込み、および等時性転送を示します。 USB ドライバー スタックは 、状態 メンバーを使用して、USB 固有の状態コードを返します。
URB を送信するために、クライアント ドライバーは IOCTL_INTERNAL_USB_SUBMIT_URB要求を 使用します。この要求は、IRP_MJ_INTERNAL_DEVICE_CONTROL型の I/O 要求パケット (IRP) を使用してデバイス に配信されます。
USB ドライバー スタックで URB の処理が完了すると、ドライバー スタックは URB 構造体の Status メンバーを使用して USB 固有の状態コードを返します。
注
KMDF ドライバーと UMDF ドライバー開発者は、USB デバイスとの通信に対応するフレームワーク インターフェイスを使用する必要があります。 詳細については、「KMDF ドライバーの USB デバイスの操作 と UMDF での USB インターフェイスの操作」を参照してください。 これらのトピックでは、USB デバイス通信に使用される基になる WDM ドライバー インターフェイスについて説明します。
このセクションでは...
| トピック | 説明 | 
|---|---|
| URB の割り当てと構築 | このトピックでは、USB クライアント ドライバーが Windows ドライバー モデル (WDM) ドライバー ルーチンを使用して、Microsoft 提供の USB ドライバー スタックに要求を送信する前に URB を割り当て、書式設定する方法について説明します。 | 
| URB を送信する方法 | このトピックでは、特定の要求を処理するために初期化された URB を USB ドライバー スタックに送信するために必要な手順について説明します。 | 
| のベスト プラクティス: URB の使用 | このトピックでは、Windows 8 に含まれる USB ドライバー スタックに URB を割り当て、ビルドし、送信するためのクライアント ドライバーのベスト プラクティスについて説明します。 |