- Published on
WinUSB で USB デバイスと通信 4 - ドライバの配布&インストール方法
- Authors
- Name
- Daisuke Kobayashi
- https://twitter.com
最後にドライバをインストールする方法について書きます.ドライバをユーザーに配布するときにどうするかということについてです.実際に自分の環境でいろいろ動かしてみた時の覚書です.
まず,ドライバのインストール方法としては下記 2 種類があります.
- デバイスマネージャー上からインストールする方法
- dpinst.exe を使ってインストールする方法
1. デバイスマネージャー上からインストールする方法
デバイスマネージャー上でのドライバの更新,もしくは USB を接続し認識できなかった時に出るウィザート上からフォルダ指定をして実行します.
この方法はユーザーにフォルダ指定などの作業を強制しますが,同一フォルダに INF ファイルを複数個置いててもウィザードが VID,PID から自動的に有効な INF ファイルを見つけてくれるというメリットがあります.
ドライバ作成時に配布する DLL は同じで デバイスによって変えなくちゃいけない部分は INF ファイルに限定されるので,この方法は複数デバイス用の配布ファイルを 1 つのフォルダにまとめておけるというメリットがあります.
2. dpinst.exe を使ってインストールする方法
dpinst.exe はドライバインストール時のウィザードを実行してくれます.WinDDK に標準で含まれています.
dpinst.exe: WinDDK\BuildNumber\redist\DIFx\dpinst\MultiLin\CPUArch
dpinst は INF ファイルと同じフォルダに入れて実行します(2回目のフォルダ構成に記述してありました). 実行するだけで,自動的にウィザードが実行されます.また xml ファイルを変更することで,アイコン,ソフトウェア使用許諾,ウィザードの画像などがカスタマイズ可能です.sample が WinDDK\BuildNumber\src\setup\DPInst フォルダに入っています.
dpinst で配布することのメリットは,先に挙げたウィザード形式のインストーラーとして実行できるとです.また,デバイスを接続していない状態でもインストールできたり,インストールしたドライバがコントロールパネルのプログラムの追加と削除に登録されるためユーザフレンドリーであるというメリットがあると思います.
ただし,同一フォルダに複数の INF ファイルがあると,INF ファイルの個数分インストールを行なってしまったり配布するときに CPU のアーキテクチャー毎に配布する dpinst を変えなくちゃいけなかったり,開発者側の管理がちょっとだけ大変なります.
1 だと必然的にマニュアルが長くなりますね.私は 1 の方法が共通化できていいと思うんですが,2 の方法のほうがユーザーにとっては簡単ですね.
最後に今回の記事を書くにあたって参考にした記事などを上げておきます.実装したソースコードなんかは Reference に載っているものを,ちょっとクラス化して整えただけだったりします.
Reference:
Windows Driver Foundation(WDF)
下記の資料は英語ですが,まず最初に目を通すべきです.私の記事はほとんど下記で実行されていることに基づいてます.
How to Use WinUSB to Communicate with a USB Device
下記は Windows でのデバイスドライバ開発の概要が把握できます.
Interface ( インターフェース ) 2010 年 02 月号 [雑誌]
USB の通信の仕様などについて知りたい場合には下記の資料が参考になります.USB のコネクタの形状や通信仕様などがまとめられています.