USB デバイス用 Windows クライアント ドライバー開発の概要

この記事では、Windows と相互運用可能な USB デバイス ドライバーを開発できるように、Windows オペレーティング システムにおけるユニバーサル シリアル バス (USB) のサポートについて説明します。

USB デバイスは、マウス デバイス、キーボードなどのように、1 つのポートを介してコンピューターに接続されている周辺機器です。 USB クライアント ドライバーは、デバイスが機能するようにハードウェアと通信するコンピューターにインストールされるソフトウェアです。 デバイスが Microsoft でサポートされているデバイス クラスに属している場合は、Windows により、デバイス用の Microsoft 提供の USB ドライバー (インボックス クラス ドライバー) の 1 つが読み込まれます。 それ以外の場合は、ハードウェアの製造元またはサードパーティ ベンダーからカスタム クライアント ドライバーが提供されている必要があります。 ユーザーは、Windows でデバイスが最初に検出されると、デバイス用のクライアント ドライバーをインストールします。 インストールが正常に終了すると、デバイスが接続されるたびに Windows でクライアント ドライバーが読み込まれ、デバイスがホスト コンピューターから切断されるとドライバーが読み込み解除されます。

Windows Driver Framework (WDF) または Windows Driver Model (WDM) を使用して、USB デバイス用のカスタム クライアント ドライバーを開発できます。 ほとんどのクライアント ドライバーでは、ハードウェアとの間で直接通信が行われるのではなく、Microsoft が提供する USB ドライバー スタックに要求が送信されます。このスタックにより、ハードウェア アブストラクション レイヤー (HAL) 関数が呼び出されて、ハードウェアにクライアント ドライバーの要求が送信されます。 このセクションのトピックでは、クライアント ドライバーで送信できる一般的な要求と、クライアント ドライバーでこれらの要求を作成するために呼び出す必要があるデバイス ドライバー インターフェイス (DDI) について説明します。

対象となる開発者

USB デバイス用のクライアント ドライバーは、USB ドライバー スタックによって公開されている DDI を介してデバイスと通信する WDF ドライバーまたは WDM ドライバーです。 このセクションは、WDM に精通している C/C++ プログラマーを対象としています。 このセクションを使用する前に、基本的なドライバーの開発について理解しておく必要があります。 詳細については、「Windows ドライバーの概要」を参照してください。 WDF ドライバーの場合、クライアント ドライバーでは、USB ターゲットを操作するために特別に設計されたカーネルモード ドライバー フレームワーク (KMDF) インターフェイスまたはユーザー モード ドライバー フレームワーク (UMDF) インターフェイスを使用できます。 USB 固有のインターフェイスの詳細については、WDF USB リファレンスおよび UMDF USB I/O ターゲット インターフェイスに関するページを参照してください。

開発ツール

Windows Driver Kit (WDK) には、ヘッダー、ライブラリ、ツール、サンプルなど、ドライバーの開発に必要なリソースが含まれています。

USB プログラミング リファレンス

USB クライアント ドライバーで使用される I/O 要求、サポート ルーチン、構造、およびインターフェイスの仕様を提供します。 これらのルーチンおよび関連するデータ構造は、WDK ヘッダーで定義されています。

USB ドライバーのサンプル

これらのサンプルを使用して、USB クライアント ドライバーのプログラミングを開始します。

公式の USB 仕様は、ユニバーサル シリアル バス ドキュメント ライブラリの Web サイトからダウンロードできます。 この Web サイトには、ユニバーサル シリアル バス仕様のさまざまな改訂へのリンクが含まれています。

ドキュメントのセクション

  • USB クライアント ドライバー開発の概要
    USB ドライバー開発の概要を紹介します。 デバイスに USB ドライバーを提供するために最も適したモデルを選択するための情報を提供します。 Microsoft Visual Studio に付属する USB テンプレートを使用して、初めてのスケルトン ユーザーモードおよびカーネルモードの USB ドライバーを記述、ビルド、およびインストールします。

  • Windows の USB ホスト側ドライバー
    USB ドライバー スタックのアーキテクチャの概要を示します。

  • USB 要求ブロック (URB) について
    USB ドライバー スタックに要求を送信するために、クライアント ドライバーで USB 要求ブロック (URB) と呼ばれる可変長データ構造を構築する方法について説明します。

  • USB 記述子
    USB ドライバー スタックに要求を送信するために、クライアント ドライバーで USB 要求ブロック (URB) と呼ばれる可変長データ構造を構築する方法について説明します。

  • USB ドライバーでの USB 構成の選択
    デバイス構成とは、クライアント ドライバーで各インターフェイスの USB 構成と代替インターフェイスを選択するために実行するタスクを指します。 このセクションでは、USB 構成を選択するために必要なメソッド呼び出しを示します。

  • USB クライアント ドライバーでの USB データ転送の送信
    USB パイプ、I/O 要求の URB のほか、クライアント ドライバーでデバイス ドライバー インターフェイス (DDI) を使用して USB デバイスとの間でデータを転送する方法について説明します。

  • USB クライアント ドライバーでの電源管理の実装
    ユニバーサル シリアル バス (USB) 仕様に準拠している USB デバイスの電源管理機能には、豊富で複雑な一連の電源管理機能が備わっています。