WinUSBドライバの自動インストール

WindowsにはWinUSBというドライバフレームワーク(?)があります。これを使えば、 自作USBデバイスと通信するドライバを自作する必要なく、 アプリケーションレベルでバルク転送などの通信を行うことができます。 というのは組み込み業界では良く知られていると思います。でも、 比較的最近可能になった裏技(?)についてはあまり知られていないのではないかと思います。 これまでは、WinUSBのドライバをインストールするためにinfファイルを作ったりする必要がありました。 でも実はWindows8以降からは、infファイルさえ必要なく、デバイスを接続するだけでドライバをインストールすることが可能になっています。 つまり、ドライバ署名なども一切気にする必要はないのです。ドライバ署名のチェックを無効にして再起動するという前時代的な作業は不要です。 これを実現するには、USBデバイス側にも少し変更が必要です。具体的には、 Microsoft OSディスクリプタというものを作成し、Windowsからのリクエストに応じて返すようにします。 Microsoft OS descriptorには2種類存在します。 標準USBストリングディスクリプタ。OS string descriptorと呼ばれます。 このディスクリプタにより、デバイスから(次に述べる)OS feature descriptorを取得可能であるとOSが判断します。 OS feature descriptor: デバイスは1つまたは複数のOS feature descriptorを持つことができます。 OS feature decriptorを取得するための手順は次のようになります。 まず、WindowsがOS string descriptorを取得するためのコントロール要求を送る Windowsは有効なOS string descriptorであることを検証する WindowsはOS string descriptorのbMS_VendorCodeフィールドの情報を用いて、OS feature descriptorを取得する OS feature descriptorには次の種類があります。 Extended Compat ID この情報に基づき、Windowsはどのドライバをロードするかを決定します。 Extended Properties Genre これはHIDデバイスによって使用される(予定)。 とりあえず、上記二つのExtended Compat ID, Extended Propertiesのディスクリプタを準備すれば、 ドライバの自動インストールと、GUIDによるアプリケーションからの通信が可能になります。 OS string descriptor OS string descriptorは標準ストリングディスクリプタの、string index 0xEEに格納されます。 OS string descriptorはデバイスにつき1つのみ持つことができます。 OS string descriptorを取得するために、GET_DESCRIPTORコントロール要求がデバイスに送られます。

www.living-in.tokyo · 東京に住むプログラマの思うところ

1

If you have a fediverse account, you can quote this note from your own instance. Search https://social.t2arc.net/objects/019b7377-4fbe-d1ca-20a7-996a9be46f76 on your instance and quote it. (Note that quoting is not supported in Mastodon.)