USB デバイス用の Windows デスクトップ アプリ

このトピックでは、アプリケーションが WinUSB 関数 を呼び出して USB デバイスと通信する方法について説明します。 このようなアプリケーションの場合 、WinUSB (Winusb.sys) をデバイスの関数ドライバーとしてインストールする必要があります。 デバイスのカーネル モード スタック内の WinUSB。 このドライバーは、System32 Windowsフォルダー Windows \ \ に \ 含まれています。

USB デバイスの関数Winusb.sysを使用している場合は、アプリケーションから WinUSB Functions を呼び出してデバイスと通信できます。 これらの関数は、ユーザー モード DLL によって公開されWinusb.dll通信プロセスを簡略化します。 標準的な USB 操作 (デバイスの構成、制御要求の送信、デバイスとの間でのデータの転送など) を実行するデバイス I/O 制御要求を構築する代わりに、アプリケーションは同等の WinUSB 関数を呼び出します。

Winusb.dll提供されたデータを使用して適切なデバイス I/O 制御要求を作成し、処理のために要求を Winusb.sys送信します。 WinUSB 関数は、USB スタックと通信するために、アプリケーションの要求に関連付ける適切な IOCTL を使用して DeviceIoControl 関数を呼び出します。 要求が完了すると、WinUSB 関数は、Winusb.sys によって返された情報 (読み取り要求からのデータなど) を呼び出し元のプロセスに渡します。 DeviceIoControl の呼び出しが成功 すると、0 以外の値が返されます。 呼び出しが失敗した場合、または保留中 (すぐに処理されない) 場合 、DeviceIoControl は 0 の値を返します。 エラーが発生した場合、アプリケーションは GetLastError を呼び出して、より詳細なエラー メッセージを表示できます。

WinUSB 関数を使用してデバイスと通信する方が、ドライバーを実装するよりも簡単です。 ただし、次の制限事項に注意してください。

  • WinUSB 関数を使用すると、一度に 1 つのアプリケーションがデバイスと通信できます。 デバイスと同時に通信するために複数のアプリケーションが必要な場合は、関数ドライバーを実装する必要があります。

  • このWindows 8.1、WinUSB 関数では、同一のエンドポイント間のストリーミング データはサポートされていません。

  • WinUSB 関数では、カーネル モードが既にサポートされているデバイスはサポートされていません。 このようなデバイスの例としては、それぞれテレフォニー API (TAPI) と NDIS でサポートされているモデムとネットワーク アダプターがあります。

  • 多機能デバイスの場合は、デバイスの INF ファイルを使用して、USB 機能ごとにインボックス カーネル モード ドライバーまたは Winusb.sys を個別に指定できます。 ただし、これらのオプションの 1 つのみを特定の関数に指定できます。両方を指定するオプションは指定しません。

注意

WinUSB 関数には XP Windows必要です。 これらの関数を C/C++ アプリケーションで使用して、USB デバイスと通信することができます。 WinUSB API を使用する UWP アプリを作成するには、USB デバイス用 の UWP アプリに関するページを参照してください

作業の開始

  1. デバイスのデスクトップ アプリを作成するために必要Windowsツールを取得する

  2. テスト USB デバイスとそのハードウェア仕様を取得します。

    仕様を使用して、アプリの機能と関連する設計上の決定を決定します。 学習目的の場合、一般的な選択肢は次のとおりです。

    • オープン システム リソース (OSR) ストアから利用できる OSR USB FX2 学習キット。 このキットは、このドキュメント セットに含まれている学習用 USB サンプルに最も適しています。

    • JJG Technologiesから利用できる Microsoft USB テスト ツール (MUTT) デバイス。 このデバイスには、「MUTT ソフトウェア パッケージのダウンロード」で利用可能な Microsoft のファームウェアが必要です

  3. デバイスへのハンドルを取得するスケルトン アプリを作成します。

    最初のアプリケーションを作成するには、次の 2 つの方法があります。

  4. デバイスWinusb.sysをインストールします。

    アプリケーションを使用Visual Studio展開を使用して、ターゲット コンピューターにドライバー パッケージVisual Studioします。 手順については、「WinUSB テンプレートに基Windowsデスクトップ アプリを作成する」を参照してください。 それ以外の場合は、カスタム INF を記述してデバイス マネージャーにドライバーを手動でインストールします。 詳細については 、「WinUSB (Winusb.sys) のインストール」を参照してください

  5. デバイスに関する情報を取得し、その記述子を表示します。

    概念情報については、「 すべての USB 開発者の概念」を参照してください。 構成記述子、サポートされている各代替設定のインターフェイス記述子、およびそれらのエンドポイント記述子を読み取って、デバイスの機能に関する情報を取得します。 詳細については、「デバイスに USB 記述子のクエリを実行する」を参照してください

  6. USB コントロール転送を送信します。

    標準の制御要求とベンダー コマンドをデバイスに送信します。 詳細については、「既定の エンドポイントへの制御転送の送信」を参照してください

  7. 一括転送または割り込み転送を送信します。

    デバイスでサポートされている一括、割り込み、および同時性エンドポイントに対して、読み取りおよび書き込み操作を実行します。 詳細については 、「I/O 要求の問題」を参照してください

  8. 同一時転送を送信します。

    ストリーム データに主に使用される、同一時読み取り要求と書き込み要求を送信します。 この機能は、Windows 8.1以降でのみ使用できます。 詳細については 、「WinUSB デスクトップ アプリからの USB 同一時転送の送信」を参照してください

USB デバイス用 Windows アプリケーションの開発

ユニバーサル シリアル バス (USB)