WinUSB.sys事始め

アクセスカウンタ

help リーダーに追加 RSS WinUSB.sys:ドライバパッケージ作成手順

<<   作成日時 : 2007/09/13 20:58   >>

ブログ気持玉 0 / トラックバック 0 / コメント 2

■WinUSB.sysを利用するUSBデバイスのドライバパッケージ作成手順
├─WDKをダウンロードしインストールする
├─使用したいUSBデバイスのベンダIDとプロダクトIDを確認する
├─デバイスドライバパッケージ用の環境を作成する
│ ├─デバイスドライバパッケージ用のフォルダを用意する(この例ではmyDeviceとする)
│ ├─myDeviceの直下に i386 と amd64 という名前でフォルダを2つ作成する
│ └─これらのフォルダに WDKの redistフォルダから i386 と amd64に対応する WdfCoInstaller01005.dll と WinUSBCoInstaller.dll をコピーする
│   ├─OS、CPUごとに異なるCoInstallerが用意されている
│   └─注意! 2007年9月現在、IA64用のWinUSBは用意されていない
├─USBデバイスのためのINFファイルを作成する
│ ├─DeviceClassのクラス名とGUID、DeviceInterfaceのGUIDは独自のものを用意する
│ │ └─GUID作成ツール:guidgen.exe
│ ├─myDeviceフォルダにサンプルINFファイルをコピーする
│ └─サンプルINFファイルの修正
│   ├─Versionセクション
│   │ └─Class名とClassGuidを用意したものに書き換える
│   ├─インストールセクション(この例ではMyDevice_WinUSB.NTx86とMyDevice_WinUSB.NTamd64)
│   │ └─USBデバイスのPathに含まれているベンダIDとプロダクトIDを使用するUSBデバイスのものに書き換える
│   └─Dev_AddRegセクション
│     └─DeviceInterfaceGUIDsを用意したものに書き換える
└─ドライバの専用インストーラーを準備する(オプションです)
  ├─DPInst.exeというツールを使用するとデバイスドライバのインストーラーが簡単に作成できます
  ├─DPInstを使用する大きなメリットは、USBデバイスを接続する前にドライバをインストールできることです
  ├─したがって、ドライバがプリインストールされている感じになってなにかと便利です
  └─DPInstについては別の機会に説明しようと思ってます。


以下がサンプルのINFファイルです。
赤字の部分を修正するだけでアプリからUSBデバイスがアクセスできるようになります。
(ブログの上で不自然に改行されているところはつながっていると思ってください)


;
; sample INF file that use WinUsb.sys as the function driver
; (for WDF KMDF Version 1.5)
;

; Versin Section
[Version]
Signature = "$windows NT$"
Class = MyDeviceClass
ClassGuid = {00000000-0000-0000-000000000000}
Provider = %ProviderName%


; Manufacturer Section
[Manufacturer]
%ProviderName% = MyDevice_WinUSB, NTx86, NTamd64


; Model Section
[MyDevice_WinUSB.NTx86]
%USB\MyDevice.DeviceDesc% = USB_Install, USB\VID_1111\PID_2222

[MyDevice_WinUSB.NTamd64]
%USB\MyDevice.DeviceDesc% = USB_Install, USB\VID_1111\PID_2222


; Install Section
[USB_Install]
Include = winusb.inf
Needs = WINUSB.NT


; Install Service Section
[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


; Install HardWare Section
[WinUSB.HW]
AddReg = Dev_AddReg

[Dev_AddReg]
HKR,,DeviceInterfaceGuids, 0x10000, "{33333333-3333-3333-333333333333}"


; Install WDF Section
[WinUSB.Wdf]
kmdfService = WinUSB, WinUsb_Install

[WinUsb_Install]
KmdfLibraryVersion = 1.5


; Install CoInstallers Section
[USB_Install.CoInstallers]
AddReg = CoInstallers_AddReg
CopyFiles = CoInstallers_CopyFiles

[CoInstallers_Addreg]
HKR,,CoInstallers32, 0x00010000, "WdfCoInstaller01005.dll, WdfCoInstaller", WinUSBCoInstaller.dll"

[CoInstallers_CopyFiles]
WinUSBCoInstaller.dll
WdfCoInstaller01005.dll


; DestinationDirs Section
[DestinationDirs]
CoInstallers_CopyFiles = 11


; Source Media Section
[sourceDisksNames]
1 = %DISK_NAME%,,,\i386
2 = %DISK_NAME%,,,\amd64

[SourceDisksFiles.NTx86]
WinUSBCoInstaller.dll = 1
WdfCoInstaller01005.dll = 1


[SourceDisksFiles.NTamd64]
WinUSBCoInstaller.dll = 2
WdfCoInstaller01005.dll = 2


; String Section
ProviderName = "MyWinUsbTest"
USB\Device.DeviceDesc = "Test USB Device using WinUSB"
WinUSB_SvcDesc = "WinUSB TEST"
DISK_NAME = "MyDevice_Install Disk"

設定テーマ

関連テーマ 一覧

月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(2件)

内 容 ニックネーム/日時
お世話になります。デバイスドライバの開発については、日本語の情報が少ない中、WinUSB に関する情報をご提供戴き、感謝しております。

引き続き、WinUSB API の使用例や DPInst の使用方法など、有用な情報のご提供に期待しております。
ShuU
2008/06/18 11:01
> ShuUさん

こんにちは。
そうなんですよね。
デバイスドライバの情報って日本語の情報が少ないんですよねぇ。
まぁ、英語も十分とはいえないんですけど…(苦笑)

WinUSBのAPIはあんまり難しくないので、APIの関数名だけで理解できると思いますが、もしお知りになりたいことがあれば遠慮無しに質問なさってください。

それよりも難しいというかコツがあるのがINFの書き方ですね。
WinUSBでは大丈夫だと思いますが、普通のデバドラのINFのServiceセクションやSYSファイルに安易な名前を使用すると他社とバッティングしてトラブルになったりします。(バッキーの会社ではちゃんと理解できてない人がINFを書いていたので長い間トラぶってました、適当に書いたら動いたからってそれをそのままリリースするのはエンジニアとしてどうかと思いますがそれをチェックできない上司もアホですな)

DPInstも便利なんですが設定内容が丸見えなので、うーむって感じですかね。
(隠蔽する方法もあるんですがCoInstallerと相性が悪いようなので…)
バッキー
2008/06/18 21:59

コメントする help

ニックネーム
本 文