INFファイルを記述する
<span style="FONT-FAMILY: 'MS ゴシック'; FONT-SIZE: 10pt; mso-ascii-font-family: Arial; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 'MS ゴシック'; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family:
皆さん、お久しぶりです。なおきお~です。
以前、私よりドライバをビルドする方法をご案内いたしました。
今回は、ビルドしたドライバをインストールするためのINFファイルの記述方法をご案内したいと思います。
また、前回と同様 toasterのbusドライバを例にしたいと思います。
まず、ドライバのインストールでは、INF ファイルが必要であり、toasterのbusドライバのINFファイルは、%BASEDIR%\src\general\toaster\infにCPUの種別ごとに格納されており、例えば、x64の場合、%BASEDIR%\src\general\toaster\inf\amd64\bus.infになります。
このINFファイルをメモ帳などで、オープンしますと、最初に[Version]セクションが記述されています。
[Version] |
Signature="$WINDOWS NT$" |
Class=System |
ClassGuid={4D36E97D-E325-11CE-BFC1-08002BE10318} |
Provider=%MSFT% |
DriverVer=09/21/2006,6.0.5736.1 |
CatalogFile=toaster.cat |
[Version]セクションには、Signature は、OS の種類を記述しますが、以下のように、Overviewなので、通常は、サンプル通り、$Windows NT$のままでよいと思います。
$Windows NT$: NT-based operating systems
$Windows 95$: Windows 9x/Me
$Chicago$: All Windows operating systems
ClassやClassGuidは、デバイスのクラス (種類) になります。また、システム定義のデバイス クラスは、以下の通り色々あり、開発するデバイスの種類に合わせて、変更する必要があります。もし、システム定義には、該当するデバイス クラスがない場合、独自のデバイスのクラスを定義することもできます。
System-Supplied Device Setup Classes
https://msdn.microsoft.com/en-us/library/ms791134.aspx
次にProviderは、ドライバを提供するメーカを記述するので、サンプル コードから、適宜 変更する必要があります。まあ、サンプル コードのように、% <Keyword> %と"%"で囲むと[String]セクションに定義した文字列を参照するようにできます。
最後に、オプションになりますが、DriverVerとCatalogFileは、ドライバのバージョンとカタログ ファイルの指定します。
カタログ ファイルは、INFファイルに記述するドライバセットに対して、ドライバ署名がされている必要があり、Windows Vista 以降のドライバでは、x64 で必須になっています。また、署名をするためには、商用の CA証明書ベンダから署名用の証明書を取得するか、サーバを構築して証明書サーバーを使用するか、makecert.exe を使用するかの、何れかになります。
コード署名証明書を取得する
https://technet.microsoft.com/ja-jp/library/cc732597.aspx
ドライバの開発時には、三つの方法のうち、makecert.exe を使用して、テスト署名を行うのが、一番 容易だと思いますので、64 ビットの Windows Vista を例にmakecert.exeで、ドライバ署名を行う方法をお見せします。
① 管理者モードでコマンド プロンプトを起動 ② 証明書ファイルの作成(使用例)Makecert.exe -r -pe -ss TestCert -n "CN= TestCert " TestCert.cer ③ 証明書ファイルの登録(使用方法)certmgr.exe -add TestCert.cer -s -r localMachine rootcertmgr.exe -add TestCert.cer -s -r localMachine trustedpublisher ④ INFファイルからカタログ ファイルを作成(使用例)Inf2cat.exe /driver:bus.inf /os:Vista_X64 ⑤ 上記②で作成した証明書で署名(使用例)SignTool sign /v /s TestCert /n TestCert /t https://timestamp.verisign.com/scripts/timestamp.dll toaster.cat ⑥ テスト モードに移行bcdedit.exe /set TESTSIGNING ON ⑦ Windows Vista を再起動shutdown.exe -r |
[Version]セクションの次は、インストール先やインストール元のセクションです。
[DestinationDirs] |
DefaultDestDir = 12 |
|
[SourceDisksNames] |
1 = %DiskId1%,,,"" |
|
[SourceDisksFiles] |
busenum.sys = 1,, |
[DestinationDirs]セクションは、インストール先で、少なくともデフォルト(DefaultDestDir) を指定する必要があり、Printer のような例外を除いて、ほとんど 12 (%windir%\system32\drivers) になります。
Using Dirids
https://msdn.microsoft.com/en-us/library/ms790174.aspx
また、[SourceDisksNames] セクションは、ドライバディスクの名前になり、ドライバのインストール中に表示されるディスクの要求ダイアログで表示されます。しかし、ドライバを適切に署名して、PnP でインストールするように適切にセットアップしておけば、ダイアログは表示されません。
[SourceDisksFiles] セクションは、ドライバセットのファイルが、どこに格納されているかを記述します。比較的 よく記述する方法として、x86やx64のように複数のCPUのドライバを一つのINFファイルにまとめるときに以下のように記述します。
[SourceDisksFiles] |
readme.txt = 1 |
|
[SourceDisksFiles.x86] |
busenum.sys = 1,\x86 |
|
[SourceDisksFiles.amd64] |
busenum.sys = 1,\ amd64 |
|
[SourceDisksFiles.ia64] |
busenum.sys = 1,\ ia64 |
[SourceDisksFiles] セクションのSuffixは、なし・".x86"・".amd64"・". ia64" の何れかになり、Suffixがない場合は、全て条件に適用されます。
また、サンプル コードでは、複数のINFファイルになっているので、試しに、一つのINFファイルにまとめみるのもいいと思います。
インストール先やインストール元のセクションの次は、[Manufacturer] セクションとモデルセクションです。
[Manufacturer] |
%StdMfg%=Standard,NTamd64 |
|
[Standard.NTamd64] |
%ToasterBus.DeviceDesc%=ToasterBus_Device, root\busenum |
[Manufacturer]セクションには、"ドライバ提供メーカ名=モデルセクション名" と記述し、複数のCPUのドライバを一つのINFファイルにする場合は、,NTx86, NTamd64, NTia64 という具合にカンマ"," で区切ります。
また、CPU種別のみならず、Windows OS のバージョンやエディションなども指定できるので、ClientのWindows OS専用のドライバを提供することが可能です。
INF Manufacturer Section
https://msdn.microsoft.com/en-us/library/ms794359.aspx
モデルセクションは、[Manufacturer] で指定したモデルセクション名にSuffixとして、CPU種別やWindowsOSのバージョンを付記します。複数のCPUを一つのINFファイルに指定する場合は、それぞれのモデルセクションが必要となります。
そして、モデルセクションは、"デバイス名=インストールセクション名, Hardware ID" を記述します。また、ここで指定するHardware ID が、マッチングしないと、PnPでは、デバイスを検知することができないので、注意してください。
インストールセクションでは、ファイルをコピーしたり、レジストリを追加するなどの指定ができます。また、"インストールセクション+.Service" のようにサービスの追加もできます。
また、インストールセクションは、デバイス クラスによって、それぞれ特徴があるので、同じデバイス クラスのサンプル コードを参照してください。
INF Sections
https://msdn.microsoft.com/en-us/library/dd445200.aspx
なお、INFファイルを記述し、ドライバ署名もしたら、pnputil.exe <INF file> と実行すれば、PnPが発生したら、サイレントでインストールをするようにセットアップします。
ただし、toasterのbusドライバは、仮想busドライバなので、手動でインストールをする必要があります。
それでは、また。