2010年02月25日
WinUSB を使おう4~Infファイル編(1)~
最大の難所がやってまいりました。
Driver開発の難所infファイルでございます。
もちろんバイブル「WinUsb_howto.docx」にも例が載っています。
しかし、ちょっと間違うとうまくインストールできない代物になります。
とりあえず「WinUsb_howto.docx」の例を引き合いにだして
太字が変更可能なところなのですが。。。
まずは[Version]セクション
(1)ここはWindowsのディバイスマネージャーが認識するClassです
USBって何で書いちゃだめかって?
たぶん書いてもいいです。
でもその場合は(2)のClassGuidは予約されているGUIDを記載しなければいけません。その理由はここです。
(2)は(1)とセットで連動しているGUIDです。
自分で勝手につけたClass名には新しくGUIDが必要になります。
GUIDを新規に生成するには「GUIDGEN.exe」 等ツールを活用します。
(3)は製造元です。ここでは「%ProviderName%」になっています。
これは[String]セクションで「ProviderName」に定義した文字列
という意味なので、[String]セクションを参照してください。
(4)はドライバのセキュリティカタログファイル名です。デジタル署名のファイルなどを格納すると思います。(やっていないので仮定です)
もしも必要ならばこちらでMS様のロゴ申請して入手してください。
ちなみになくてもドライバインストール時に警告されるだけです。
(5)バイブルの(例)には載っていなかったので追記します。
ここの[日付]と[バージョン]に反映されます。
フォーマット DriverVer=mm/dd/yyyy[,w.x.y.z]
バージョンのみ DriverVer = ,1.0.0
日付のみ DriverVer = 02/25/2010
という風に記載します。
長くなったのでとりあえずInfファイル編(2)に続きます。
Driver開発の難所infファイルでございます。
もちろんバイブル「WinUsb_howto.docx」にも例が載っています。
しかし、ちょっと間違うとうまくインストールできない代物になります。
とりあえず「WinUsb_howto.docx」の例を引き合いにだして
太字が変更可能なところなのですが。。。
まずは[Version]セクション
[Version]
Signature = "$Windows NT$"
Class = MyDeviceClass ・・・・(1)
ClassGuid={78A1C341-4539-11d3-B88D-00C04FAD5171}・・・・(2)
Provider = %ProviderName%・・・・(3)
CatalogFile=MyCatFile.cat・・・・(4)
DriverVer = ,1.0.0・・・・(5)
; ================== Class section ==================
[ClassInstall32]
Addreg=MyDeviceClassReg
[MyDeviceClassReg]
HKR,,,0,%ClassName%
HKR,,Icon,,-1
(1)ここはWindowsのディバイスマネージャーが認識するClassです
USBって何で書いちゃだめかって?
たぶん書いてもいいです。
でもその場合は(2)のClassGuidは予約されているGUIDを記載しなければいけません。その理由はここです。
(2)は(1)とセットで連動しているGUIDです。
自分で勝手につけたClass名には新しくGUIDが必要になります。
GUIDを新規に生成するには「GUIDGEN.exe」 等ツールを活用します。
(3)は製造元です。ここでは「%ProviderName%」になっています。
これは[String]セクションで「ProviderName」に定義した文字列
という意味なので、[String]セクションを参照してください。
(4)はドライバのセキュリティカタログファイル名です。デジタル署名のファイルなどを格納すると思います。(やっていないので仮定です)
もしも必要ならばこちらでMS様のロゴ申請して入手してください。
ちなみになくてもドライバインストール時に警告されるだけです。
(5)バイブルの(例)には載っていなかったので追記します。
ここの[日付]と[バージョン]に反映されます。
フォーマット DriverVer=mm/dd/yyyy[,w.x.y.z]
バージョンのみ DriverVer = ,1.0.0
日付のみ DriverVer = 02/25/2010
という風に記載します。
長くなったのでとりあえずInfファイル編(2)に続きます。
WinUSB を使おう3~インストール編~
さてさてDDKも展開しDriverをコピーして。。。。
DDKの中にWinUsb.sysがどこにもない!!!
たまたまOSによっては入っている場合もあるようですが
新たに導入しようとしているDeviceのDriverとして紐つけできないのです。
これはバイブル「WinUsb_howto.docx」の「How to Install WinUsb.sys as a Function Driver」に書いてあります。
1.inf
2.WinUSB Co-Installer
3.KMDF Co-Installerが必要なのです。
1.が今回作成すべきもの!(infファイル編参照)
2.3.はDDKで提供されています。
ちなみに3.のKMDFは厳密に言うとWinUsb.lib(DLL)も使うので
WDFが必要ですね。
WDFとはWindows Driver Foundation (WDF)というもので
Driver開発のドライバー開発用のフレームワークの総称です。
ちなみにこの2.3.がDDKのどこにあるかというと
2.は「WinDDK/BuildNumber/redist/winusb」
3.は「WinDDK/BuildNumber/redist/wdf 」
(BuildNumberはDDKのVersionのことです)
この記事記載時は7600.16385.0です。
DDKの中にWinUsb.sysがどこにもない!!!
たまたまOSによっては入っている場合もあるようですが
新たに導入しようとしているDeviceのDriverとして紐つけできないのです。
これはバイブル「WinUsb_howto.docx」の「How to Install WinUsb.sys as a Function Driver」に書いてあります。
1.inf
2.WinUSB Co-Installer
3.KMDF Co-Installerが必要なのです。
1.が今回作成すべきもの!(infファイル編参照)
2.3.はDDKで提供されています。
ちなみに3.のKMDFは厳密に言うとWinUsb.lib(DLL)も使うので
WDFが必要ですね。
WDFとはWindows Driver Foundation (WDF)というもので
Driver開発のドライバー開発用のフレームワークの総称です。
ちなみにこの2.3.がDDKのどこにあるかというと
2.は「WinDDK/BuildNumber/redist/winusb」
3.は「WinDDK/BuildNumber/redist/wdf 」
(BuildNumberはDDKのVersionのことです)
この記事記載時は7600.16385.0です。
WinUSBを使おう2~構成編~
まず構成をメモっておく
APL
USER.DLL
WinUsb.lib
WinUsb.sys
Device
上から黄色がUSER層
真ん中緑がKERNEL層
下がハードウェア
ちなみにDDKで用意してくれてるのは太字斜体の部分
WindowsのDriver的に言うと
WinUsb.lib(.dll)がUSER-MODE Driver
WinUsb.sysがKERNEL-MODE Driver
になる
WinUSB Driverはあくまで汎用Driverなので基本的な
「初期化」「読み」「書き」「終了」「設定」だけです。
Deviceとの細かな通信制御には「USER.DLL」が必要。
まっいきなりAPLって場合もあるのかもしれませんが。
APL
USER.DLL
WinUsb.lib
WinUsb.sys
Device
上から黄色がUSER層
真ん中緑がKERNEL層
下がハードウェア
ちなみにDDKで用意してくれてるのは太字斜体の部分
WindowsのDriver的に言うと
WinUsb.lib(.dll)がUSER-MODE Driver
WinUsb.sysがKERNEL-MODE Driver
になる
WinUSB Driverはあくまで汎用Driverなので基本的な
「初期化」「読み」「書き」「終了」「設定」だけです。
Deviceとの細かな通信制御には「USER.DLL」が必要。
まっいきなりAPLって場合もあるのかもしれませんが。