WinUSB

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ファイルから開放されました。


ayuthky_m at 16:21|PermalinkComments(0)TrackBack(0)

WinUSB を使おう6~Infファイル編(3)~

WinUSBのインストールを設定する部分にきました。
[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.dll
WdfCoInstaller01009.dll
WUDFUpdate_01009.dll


・・・(4)

[DestinationDirs]

CoInstallers_CopyFiles=11

1)ここは入手したDDKに入っているWDFのVersionを記載します。今回入手したDDK Ver7600.16385.0では1.9版です


(2)は構成編で説明したUSER.DLLで紐付けするDeviceInterfaceGUIDになります。これは新規にGUIDを生成する必要があります。そんな説明はこちらに詳しく記載してあります。


(3)ここはWDFのVersionを修正します。

(4)重要なのはここです。
「WinDDK/BuildNumber/redist/winusb」に入っているDLLの名称
「WinDDK/BuildNumber/redist/wdf 」に入っているDLLの名称を書きます。

この記事記載時は7600.16385.0では
winusbcoinstaller2.dll
WdfCoInstaller01009.dll
WUDFUpdate_01009.dll

となります。
三番目のはどうやらWDFに含まれるUMDFのUPDATEらしいので
必要になります。






ayuthky_m at 15:29|PermalinkComments(0)TrackBack(0)

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)


ayuthky_m at 15:19|PermalinkComments(0)TrackBack(0)

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)バイブルの(例)には載っていなかったので追記します。
driver0
ここの[日付]と[バージョン]に反映されます。
フォーマット  DriverVer=mm/dd/yyyy[,w.x.y.z]
バージョンのみ DriverVer   = ,1.0.0
日付のみ    DriverVer   = 02/25/2010
という風に記載します。


長くなったのでとりあえずInfファイル編(2)に続きます。

ayuthky_m at 13:53|Permalink

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って場合もあるのかもしれませんが。






ayuthky_m at 11:20|Permalink