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ドライバなので、手動でインストールをする必要があります。

 

それでは、また。