WinUSB で USB デバイスと通信 4 - ドライバの配布&インストール方法

Posted Sun Sep 16 2012

最後にドライバをインストールする方法について書きます.ドライバをユーザーに配布するときにどうするかということについてです.実際に自分の環境でいろいろ動かしてみた時の覚書です.

まず,ドライバのインストール方法としては下記2種類があります.

  1. デバイスマネージャー上からインストールする方法
  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 ハードウェア開発

Windows Driver Foundation(WDF)

下記の資料は英語ですが,まず最初に目を通すべきです.私の記事はほとんど下記で実行されていることに基づいてます.

How to Use WinUSB to Communicate with a USB Device

下記は Windows でのデバイスドライバ開発の概要が把握できます.

Interface ( インターフェース ) 2010年 02月号 [雑誌]

USB の通信の仕様などについて知りたい場合には下記の資料が参考になります.USBのコネクタの形状や通信仕様などがまとめられています.

Interface ( インターフェース ) 2010年 03月号 [雑誌]

Windows Sensor Driver and WinUSB – Sensor Driver for iNemo