この記事では、Microsoft が提供する USB ホスト コントローラー拡張機能 (UCX) と通信するユニバーサル シリアル バス (USB) ホスト コントローラー ドライバーを開発するための Windows オペレーティング システムでのサポートについて説明します。
仕様に準拠していない xHCI ホスト コントローラーを開発している場合、またはカスタムの xHCI 以外のハードウェア (仮想ホスト コントローラーなど) を開発している場合は、UCX と通信するホスト コントローラー ドライバーを記述できます。 たとえば、USB デバイスをサポートするワイヤレス ドックがあるとします。 PC は、トランスポートとして TCP 経由の USB を使用して、ワイヤレス ドック経由で USB デバイスと通信します。
USB ホスト コントローラー拡張機能 (UCX)
USB ホスト コントローラー拡張機能は、システム提供のドライバー (Ucx01000.sys) です。 このドライバーは、 Windows Driver Framework プログラミング インターフェイスを使用してフレームワーク クラス拡張機能として実装されます。 ホスト コントローラー ドライバーは、そのクラス拡張機能のクライアント ドライバーとして機能します。 ホスト コントローラー ドライバーはハードウェアの操作とイベント、電源管理、PnP イベントを処理しますが、UCX は、ホスト コントローラー ドライバーへの要求をキューに入れ、その他のタスクを実行する抽象インターフェイスとして機能します。
UCX は、Windows の USB ホスト側ドライバーの 1 つです。 ホスト コントローラー デバイス スタックに FDO として読み込まれます。
USB ホスト コントローラー ドライバー
UCX は拡張可能であり、さまざまなホスト コントローラー ドライバーをサポートするように設計されています。 Windows には、USB xHCI ホスト コントローラーを対象とする xHCI ドライバー (Usbxhci.sys) が用意されています。
ホスト コントローラー ドライバーは、Kernel-Mode Driver Framework (KMDF) ドライバーとして記述された UCX のクライアントです。
Microsoft が提供するバイナリ
ホスト コントローラー ドライバーを記述するには、UCX (Ucx01000.sys) とスタブ ライブラリ (Ucx01000.lib) が必要です。 スタブ ライブラリは Windows Driver Kit (WDK) にあります。 ライブラリは、2 つの主要な機能を実行します。
- ホスト コントローラー ドライバーによって行われた呼び出しを変換し、UCX に渡します。
- バージョン管理のサポートを提供します。 ホスト コントローラー ドライバーは、UCX がホスト コントローラー ドライバーと同じメジャー バージョン番号を持ち、ホスト コントローラー ドライバーと同じかそれより大きいマイナー バージョン番号を持っている場合にのみ、UCX で動作します。
開発ツール
WDK には、ヘッダー、ライブラリ、ツール、サンプルなど、ドライバー開発に必要なリソースが含まれています。
始めましょう
アーキテクチャのさまざまなコンポーネント (デバイス、ホスト コントローラー、ハブ) の予期される動作を説明する公式仕様を読みます。
UCX のアーキテクチャを理解する
Microsoft が提供する USB ドライバー スタックについて理解します。
アーキテクチャ: USB ホスト コントローラー拡張機能 (UCX)
UCX オブジェクトとハンドルについて理解する
UCX は、WDF オブジェクト機能を拡張して、独自の USB 固有の UCX オブジェクトを定義します。 WDF オブジェクトの詳細については、「 Framework オブジェクトの概要」を参照してください。
基になるホスト コントローラー ドライバーへの要求をキューに格納する場合、UCX はこれらのオブジェクトを使用します。 詳細については、 ホスト コント ローラー ドライバーで使用される UCX オブジェクトとハンドルを参照してください。
UCX オブジェクト | 説明 |
---|---|
ホスト コントローラー オブジェクト (UCXCONTROLLER) | ホスト コントローラー ドライバーによって作成されるホスト コントローラーを表します。 ドライバーは、ホスト コントローラー インスタンスごとに 1 つのホスト コントローラー オブジェクトのみを作成する必要があります。 通常、UcxControllerCreate メソッドを呼び出すことによって、EVT_WDF_DRIVER_DEVICE_ADD コールバック内に作成されます。 |
ルート ハブ オブジェクト (UCXROOTHUB) | ホスト コントローラーのルート ポートの状態を取得および制御します。 ホスト コントローラー ドライバーによって、通常EVT_WDF_DRIVER_DEVICE_ADD コールバック内で、UcxRootHubCreate メソッドを呼び出すことによって作成されます。 |
USB デバイス オブジェクト (UCXUSBDEVICE) | バスに接続されている物理 USB デバイスを表します。 ホスト コントローラー ドライバーによって通常、**UcxUsbDeviceCreate メソッドを呼び出すことによって、EVT_UCX_CONTROLLER_USBDEVICE_ADD コールバック内で作成されます。 |
エンドポイントオブジェクト (UCXENDPOINT) | USB デバイス オブジェクトのエンドポイントを表します。 ホスト コントローラー ドライバーによって、通常はEVT_UCX_USBDEVICE_DEFAULT_ENDPOINT_ADDまたはEVT_UCX_USBDEVICE_ENDPOINT_ADDコールバック内で**UcxEndpointCreate メソッドを呼び出すことによって作成されます。 |
Stream オブジェクト (UCXSTREAMS) | 1 つの一括エンドポイントにまたがるデバイスへのパイプの数を表します。 ホスト コントローラー ドライバーによって通常、UcxStaticStreamsCreate メソッドを呼び出すことによって、EVT_UCX_ENDPOINT_STATIC_STREAMS_ADD コールバック内で作成されます。 |
ドキュメント セクション
ホスト コントローラー ドライバーのルート ハブ コールバック関数
UCX は、ルート ハブに関連するほとんどの操作を処理します。 これにより、USB ハブ ドライバーは、通常のハブと対話するのと同じ方法でルート ハブと対話できます。 ホスト コントローラー ドライバーは、そのコールバック関数を登録できます。
USB ホスト コントローラー ドライバーで I/O 要求を処理する
UCX は受信 USB 要求ブロック (URB) をトリアージし、正しいエンドポイント キューに転送します。
ホスト コントローラー ドライバーで USB エンドポイントを構成する
ホスト コントローラー ドライバーは、エンドポイントに関連付けられているキューの UCX の管理と、コントローラー ハードウェアへのエンドポイントのプログラミングにおいて役割を果たします。
USB ホスト コントローラー拡張機能 (UCX) リファレンス
クライアント ドライバーで使用される I/O 要求、サポート ルーチン、構造体、およびインターフェイスの仕様を提供します。 これらのルーチンと関連するデータ構造は、WDK ヘッダーで定義されます。
UCX はフレームワーク クラス拡張機能と呼ばれます。
ホスト コントローラー ドライバーは、 クライアント ドライバーと呼ばれます。