driver
2010年02月25日
WinUSB を使おう7~Infファイル編(4)最終~
; ================= Source Media Section =====================
[SourceDisksNames]
1 = %DISK_NAME%,,,\i386
2 = %DISK_NAME%,,,\amd64
3 = %DISK_NAME%,,,\ia64
[SourceDisksFiles.x86]
winusbcoinstaller2.dll=1
WdfCoInstaller01009.dll=1
WUDFUpdate_01009.dll=1
[SourceDisksFiles.NTamd64]
winusbcoinstaller2.dll=2
WdfCoInstaller01009.dll=2
WUDFUpdate_01009.dll=2
[SourceDisksFiles.ia64]
winusbcoinstaller2.dll=3
WdfCoInstaller01009.dll=3
WUDFUpdate_01009.dll=3 ・・・(1)
; =================== Strings ===================
[Strings]
ProviderName="MyWinUsbTest" ・・・(2)
USB\MyDevice.DeviceDesc="Test using WinUSB only" ・・・(3)
WinUSB_SvcDesc="WinUSB Test"
DISK_NAME="My Install Disk"
ClassName="MyDeviceClass" ・・・(4)
やっと完了。
[Source]セクション
(1)は先ほど準備したDLLたちの格納先を示しています。
[String]セクション
やっとここの説明ですね
今まで出てきた「%%文字列%%」はここで定義されているのです。
(2)ずばりディバイスマネージャーで[プロバイダ名]として出力する箇所です。
(3)このDriverの名称です。狭義の意味ではWinUSB Driverなんですけどね。このInfファイルも含めて広義の意味で自分で名前をつけられます(えっへん!)
(4)これがディバイスマ ネージャーで表示されちゃうClass名です。
その他Stringもレジストリエディタで表示されたりする名称だったりします。
やっとinfファイルから開放されました。
WinUSB を使おう6~Infファイル編(3)~
[Installation]セクション
どうやらこのinfファイルからwinusb.infをさらにインクルードしてますね。
; =================== Installation ===================
[USB_Install]
Include=winusb.inf
Needs=WINUSB.NT
[USB_Install.Services]
Include=winusb.inf
AddService=WinUSB,0x00000002,WinUSB_ServiceInstall
[WinUSB_ServiceInstall]
DisplayName = %WinUSB_SvcDesc%
ServiceType = 1
StartType = 3
ErrorControl = 1
ServiceBinary = %12%WinUSB.sys
[USB_Install.Wdf]
KmdfService=WINUSB, WinUsb_Install
[WinUSB_Install]
KmdfLibraryVersion=1.9 ・・・(1)
[USB_Install.HW]
AddReg=Dev_AddReg
[Dev_AddReg]
HKR,,DeviceInterfaceGUIDs,0x10000,"{b35924d6-3e16-4a9e-9782-5524a4b79bac}"・・・(2)
[USB_Install.CoInstallers]
AddReg=CoInstallers_AddReg
CopyFiles=CoInstallers_CopyFiles
[CoInstallers_AddReg]
HKR,,CoInstallers32,0x00010000,""WdfCoInstaller01009.dll,WdfCoInstaller","WinUSBCoInstaller.dll"
・・・(3)
[CoInstallers_CopyFiles]
winusbcoinstaller2.dllWdfCoInstaller01009.dll
WUDFUpdate_01009.dll
・・・(4)
[DestinationDirs]
CoInstallers_CopyFiles=11
(1)ここは入手したDDKに入っているWDFのVersionを記載します。今回入手したDDK Ver7600.16385.0では1.9版です
(2)は構成編で説明したUSER.DLLで紐付けするDeviceInterfaceGUIDになります。これは新規にGUIDを生成する必要があります。そんな説明はこちらに詳しく記載してあります。
(4)重要なのはここです。
「WinDDK/BuildNumber/redist/winusb」に入っているDLLの名称
「WinDDK/BuildNumber/redist/wdf 」に入っているDLLの名称を書きます。
この記事記載時は7600.16385.0では
winusbcoinstaller2.dll
WdfCoInstaller01009.dll
WUDFUpdate_01009.dll
となります。
三番目のはどうやらWDFに含まれるUMDFのUPDATEらしいので
必要になります。
WinUSB を使おう5~Infファイル編(2)~
[Manufacturer]セクション
[Models]セクション
; ========== Manufacturer/Models sections ===========
[Manufacturer]
%ProviderName% = MyDevice_WinUSB,NTx86,NTamd64,NTia64・・・(1)
[MyDevice_WinUSB.NTx86]
%USB\MyDevice.DeviceDesc% =USB_Install,USB\VID_0547&PID_1002
[MyDevice_WinUSB.NTamd64]
%USB\MyDevice.DeviceDesc% =USB_Install,USB\VID_0547&PID_1002
[MyDevice_WinUSB.NTia64]
%USB\MyDevice.DeviceDesc% =USB_Install,USB\VID_0547&PID_1002
・・・(2)
(1)インストールする対応機器を記載してる[Manufacturer]セクションにあたる
(2)使用するDeviceのベンダーIDとプロダクトIDを記載する箇所です。
三つありますが記載している内容はすべて一緒です。
[Models]セクションにあたるのかな?
「%ProviderName%」と「%USB\MyDevice.DeviceDesc%」に関して後述する[String]セクションの定義ですのでそのときに。
InfファイルはこのベンダーIDとプロダクトIDでDeviceを認識しているといっても過言ではないです。
このあとがWinUSBのインストールの記載になりますinfファイル編(3)へ
WinUSB を使おう4~Infファイル編(1)~
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の中に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です。