次の方法で共有


ファイル システム ドライバー用の INF ファイルの作成

ファイル システム INF ファイルについて

Windows セットアップおよびデバイス インストーラー サービスは、SetupAPI と総称され、Windows のセットアップとドライバー インストールを制御する機能を提供します。 INF ファイルは、インストール プロセスを制御します。

ファイル システム ドライバーの INF ファイルにより、SetupAPI がドライバーのインストールに使用する指示が提供されます。 INF ファイルは、ドライバーの実行に必要なファイルと、ドライバー ファイルのソースと宛先のディレクトリを指定するテキスト ファイルです。 INF ファイルには、ドライバーの開始の種類や読み込み順序グループなど、SetupAPI がレジストリに格納するドライバー構成情報も含まれています。

INF ファイルの詳細については、「INF ファイルの作成」および「INFファイルのセクションとディレクティブ」を参照してください。 ドライバーの署名に関する一般的な情報については、「ドライバーの署名」を参照してください。

ドライバーを複数のバージョンの Windows オペレーティング システムにインストールするために、1 つの INF ファイルを作成できます。 このような INF ファイルの作成の詳細については、「複数のプラットフォームとオペレーティング システム用の INF ファイルの作成」および「国際対応 INF ファイルの作成」を参照してください。

64 ビット バージョンの Windows Vista 以降では、すべてのカーネル モード コンポーネントを読み込んで実行するために署名する必要があります。 この要件には、ファイル システム ドライバー (ファイル システム、レガシ フィルター、ミニフィルター ドライバー) などの非 PnP (プラグ アンド プレイ) ドライバーが含まれます。 これらのバージョンの Windows オペレーティング システムの場合、次の情報はファイル システム ドライバーに関連します。

  • PnP 以外のドライバー (ファイル システム ドライバーを含む) の INF ファイルは、[Manufacturer] セクションまたは [Models] セクションを含める必要はありません。

  • WDK インストール ディレクトリ内の \bin\SelfSign ディレクトリにある SignTool コマンドライン ツールを使用して、ドライバーの SYS 実行可能ファイルに直接 "署名を埋め込む" ことができます。 パフォーマンス上の理由から、ブート開始ドライバーは埋め込み署名を含む必要があります。

  • INF ファイルを指定すると、Inf2Cat コマンドライン ツールを使用して、ドライバー パッケージのカタログ (.cat) ファイルを作成できます。

  • 管理者権限があれば、Windows Vista 以降の x64 ベース システムに署名されていないドライバーを引き続きインストールできます。 ただし、ドライバーは署名されていないため、読み込みに失敗します (したがって、実行されます)。

  • 64 ビット バージョンの Windows Vista の署名プロセスの推進を含む、署名プロセスの推進の詳細については、「カーネルモード コード署名のチュートリアル」を参照してください。

  • カスタム カーネルモード開発ツールを含むすべてのカーネルモード コンポーネントに署名する必要があります。 詳細については、「開発およびテスト中のドライバーの署名 (Windows Vista 以降)」を参照してください。

INF ファイルを使用して、レジストリから情報を読み取ったり、ユーザー モード アプリケーションを起動したりすることはできません。

ファイル システム ドライバー INF ファイルのセクション

独自のファイル システム ドライバー INF ファイルを作成するには、ガイドとして次の情報を使用します。 InfVerif ツールを使用すると INF ファイルの構文をチェックできます。

ファイル システム ドライバーの INF ファイルには、通常、次のセクションが含まれています。

Version セクション (必須)

Version セクションでは、次のコード例に示すように、ドライバーのバージョン情報を指定します。

[Version]
Signature   = "$WINDOWS NT$"
Provider    = %Msft%
DriverVer   = 08/28/2000,1.0.0.1
CatalogFile =

次の表に、ファイル システム フィルター ドライバーが Version セクションに指定する必要がある値を示します。

入力
Signature "$WINDOWS NT$"
プロバイダー 独自の INF ファイルには、Microsoft 以外のプロバイダーを指定する必要があります。
DriverVer INF DriverVer ディレクティブ」を参照
CatalogFile このエントリは空白にしておきます。 将来的には、署名されたドライバー用の WHQL 提供カタログ ファイルの名前が含まれる予定です。

DestinationDirs セクションでは、ファイル システム ドライバー ファイルをコピーするディレクトリを指定します。

このセクションおよび ServiceInstall セクションでは、システム定義の数値を使用して、既知のシステム ディレクトリを指定できます。 これらの値の一覧については、「INF DestinationDirs セクション」を参照してください。 次のコード例で、値 "12" は Drivers ディレクトリ (%windir%\system32\drivers) を参照します。

[DestinationDirs]
DefaultDestDir = 12
ExampleFileSystem.DriverFiles = 12

SourceDisksNames セクション (必須)

SourceDisksNames セクションでは、使用する配布メディアを指定します。

次のコード例では、SourceDisksNames セクションに、ファイル システム ドライバーに対して 1 つの配布メディアが指定されています。 メディアの一意識別子は 1 です。 メディアの名前は %Disk1% トークンによって指定されます。これは、INF ファイルの Strings セクションで定義されています。

[SourceDisksNames]
1 = %Disk1%

SourceDisksFiles セクション (必須)

SourceDisksFiles セクションでは、コピーするファイルの場所と名前を指定します。

次のコード例では、SourceDisksFiles セクションに、ファイル システム ドライバーのためにコピーするファイルと、一意識別子 1 のメディアにそのファイルがあることを指定します (この識別子は INF ファイルの SourceDisksNames セクションで指定されます)。

[SourceDisksFiles]
examplefilesystem.sys = 1

DefaultInstall セクション (必須)

DefaultInstall セクションでは、CopyFiles ディレクティブによって、ファイル システム ドライバーのドライバー ファイルが DestinationDirs セクションに指定された宛先にコピーされます。

Note

CopyFiles ディレクティブで、カタログ ファイルまたは INF ファイル自体を参照しないでください。これらのファイルは SetupAPI によって自動的にコピーされます。

ドライバーを複数のバージョンの Windows オペレーティング システムにインストールするために、1 つの INF ファイルを作成できます。 この種類の INF ファイルは、オペレーティング システムのバージョンごとに複数の DefaultInstallDefaultInstall.ServicesDefaultUninstall、および DefaultUninstall.Services セクションを作成することによって作成されます。 各セクションには、適用するオペレーティング システムのバージョンを指定する decoration (たとえば、 .ntx86.ntia64.nt) のラベルが付けられます。 この種類の INF ファイルの作成の詳細については、「複数のプラットフォームとオペレーティング システム用の INF ファイルの作成」を参照してください。

次のコード例では、CopyFiles ディレクティブによって、INF ファイルの ExampleFileSystem.DriverFiles セクションに指定されたファイルがコピーされます。

[DefaultInstall]
OptionDesc = %ServiceDesc%
CopyFiles = ExampleFileSystem.DriverFiles

[ExampleFileSystem.DriverFiles]
examplefilesystem.sys

DefaultInstall.Services セクション (必須)

DefaultInstall.Services セクションには、特定のドライバーのサービスが読み込まれる方法とタイミングを制御する AddService ディレクティブが含まれます。

次のコード例では、AddService ディレクティブによってファイル システム サービスがオペレーティング システムに追加されます。 %ServiceName% トークンにはサービス名文字列が含まれます。これは、INF ファイルの Strings セクションで定義されます。 ExampleFileSystem.Service は、ファイル システム ドライバーの ServiceInstall セクションの名前です。

[DefaultInstall.Services]
AddService = %ServiceName%,,ExampleFileSystem.Service

ServiceInstall セクション (必須)

ServiceInstall セクションでは、サブキーまたは値の名前がレジストリに追加され、値が設定されます。 ServiceInstall セクションの名前は、DefaultInstall.Services セクションAddService ディレクティブに指定されている必要があります。

次のコード例は、ファイル システム ドライバーの ServiceInstall セクションを示しています。

[ExampleFileSystem.Service]
DisplayName    = %ServiceName%
Description    = %ServiceDesc%
ServiceBinary  = %12%\examplefilesystem.sys
ServiceType    = 2 ;    SERVICE_FILE_SYSTEM_DRIVER
StartType      = 1 ;    SERVICE_SYSTEM_START
ErrorControl   = 1 ;    SERVICE_ERROR_NORMAL
LoadOrderGroup = "File System"
AddReg         = ExampleFileSystem.AddRegistry

DisplayName エントリでは、サービスの名前を指定します。 前の例では、サービス名文字列は %ServiceName% トークンによって指定されます。これは、INF ファイルの Strings セクションに定義されています。

Description エントリでは、サービスについて説明する文字列を指定します。 前の例では、この文字列は %ServiceDesc% トークンによって指定されます。これは、INF ファイルの Strings セクションに定義されています。

ServiceBinary エントリでは、サービスの実行可能ファイルのパスを指定します。 前の例で、値 12 は Drivers ディレクトリ (%windir%\system32\drivers) を参照しています。

ServiceType エントリは、サービスの種類を指定します。 次の表に、ServiceType に指定できる値と、対応するサービスの種類を示します。

説明
0x00000001 SERVICE_KERNEL_DRIVER (デバイス ドライバー サービス)
0x00000002 SERVICE_FILE_SYSTEM_DRIVER (ファイル システムまたはファイル システム フィルター ドライバー サービス)
0x00000010 SERVICE_WIN32_OWN_PROCESS (それ自体のプロセスで実行される Microsoft Win32 サービス)
0x00000020 SERVICE_WIN32_SHARE_PROCESS (プロセスを共有する Win32 サービス)

ServiceType エントリは、ファイル システム ドライバーに対しては常に SERVICE_FILE_SYSTEM_DRIVER に設定する必要があります。

StartType エントリは、サービスを起動するタイミングを指定します。 次の表に、StartType に指定できる値と、対応する開始の種類を示します。

説明
0x00000000 SERVICE_BOOT_START
0x00000001 SERVICE_SYSTEM_START
0x00000002 SERVICE_AUTO_START
0x00000003 SERVICE_DEMAND_START
0x00000004 SERVICE_DISABLED

これらの開始の種類からご使用のファイル システム ドライバーに適したものを判断するには、詳細について、「ドライバーが読み込まれるタイミングを決定する方法」を参照してください。

x64 ベースの Windows Vista 以降のシステムでは、ブート開始ドライバー (開始の種類が SERVICE_BOOT_START のドライバー) のバイナリ イメージ ファイルに埋め込み署名が含まれる必要があります。 この要件により、最適なシステム ブート パフォーマンスが保証されます。 詳細については、「カーネルモードのコード署名のチュートリアル」を参照してください。

StartType エントリと LoadOrderGroup エントリによって、ドライバーがいつ読み込まれるかが決まる方法については、「ドライバーが読み込まれるタイミングを決定する方法」を参照してください。

ErrorControl エントリは、システムの起動時にサービスが開始できなかった場合に実行するアクションを指定します。 次の表に、ErrorControl に指定できる値と、それに対応するエラー制御値を示します。

説明
0x00000000 SERVICE_ERROR_IGNORE (エラーをログに記録し、システムの起動を続行します)。
0x00000001 SERVICE_ERROR_NORMAL (エラーをログに記録し、ユーザーにメッセージを表示して、システムの起動を続行します)。
0x00000002 SERVICE_ERROR_SEVERE (レジストリの LastKnownGood 制御設定に切り替えて、システムの起動を続行します)。
0x00000003 SERVICE_ERROR_CRITICAL (システムのスタートアップでレジストリの LastKnownGood コントロール セットが使用されていない場合は、LastKnownGood に切り替えて、もう一度やり直してください。起動に失敗した場合は、バグ チェック ルーチンを実行します。システムの起動に必要なドライバーのみが、INF ファイルでこの値を指定する必要があります)。

LoadOrderGroup エントリは、ファイル システム ドライバーに対しては常に "File System" に設定する必要があります。 この設定は、 LoadOrderGroup エントリがファイル システム フィルターの読み込み順序グループのいずれかに設定されているファイル システム フィルター ドライバーまたはファイル システム ミニフィルター ドライバーに指定されているものとは異なります。 読み込み順序グループの詳細については、「 ファイル システム フィルター ドライバーの注文グループの読み込み ミニフィルター ドライバーの注文グループと高度の読み込み を参照してください

AddReg ディレクティブは、INF ライター定義の 1 つ以上の AddRegistry セクション (新しくインストールされるサービスのためにレジストリに格納される情報を含む) を参照します。

初期インストールの後で INF ファイルがドライバーのアップグレードにも使用される場合、AddRegistry セクションに含まれるエントリによって 0x00000002 (FLG_ADDREG_NOCLOBBER) フラグを指定する必要があります。 このフラグを指定すると、後続のファイルがインストールされるときに HKLM\CurrentControlSet\Services のレジストリ エントリが保持されます。 次に例を示します。

[ExampleFileSystem.AddRegistry]
HKR,Parameters,ExampleParameter,0x00010003,1

DefaultUninstall セクション (省略可能)

DefaultUninstall セクションは省略可能ですが、ドライバーをアンインストールできる場合は推奨されます。 ファイルとレジストリ エントリを削除するための、DelFiles ディレクティブと DelReg ディレクティブが含まれます。

次のコード例では、DelFiles ディレクティブによって、INF ファイルの ExampleFileSystem.DriverFiles セクションに指定されたファイルが削除されます。

[DefaultUninstall]
DelFiles   = ExampleFileSystem.DriverFiles
DelReg     = ExampleFileSystem.DelRegistry

DelReg ディレクティブは、INF ライター定義の 1 つ以上の DelRegistry セクションを参照します。このセクションには、アンインストールするサービスについてレジストリから削除する情報が含まれます。

DefaultUninstall.Services セクション (省略可能)

DefaultUninstall.Services セクションは省略可能ですが、ドライバーをアンインストールできる場合は推奨されます。 ファイル システム ドライバーのサービスを削除するための DelService ディレクティブが含まれます。

次のコード例では、DelService ディレクティブによってファイル システム ドライバーのサービスがオペレーティング システムから削除されます。

[DefaultUninstall.Services]
DelService = %ServiceName%,0x200

DelService ディレクティブは、サービスが削除される前に、サービスを停止する0x200 (SPSVCINST_STOPSERVICE) フラグを常に指定する必要があります。

完全にアンインストールできないファイル システム製品の特定のクラスがあります。 このような場合は、アンインストールできる製品のコンポーネントをアンインストールするだけで、アンインストールできないコンポーネントはそのまま残すことができます。 このような製品の例として、Microsoft Single Instance Store (SIS) 機能があります。

Strings セクション (必須)

Strings セクションでは、INF ファイルで使用される各 %strkey% トークンを定義します。

たとえば、ファイル システム ドライバーは、INF ファイルに次の文字列を定義します。

[Strings]
Msft        = "Microsoft Corporation"
ServiceDesc = "Example File System Driver"
ServiceName = "ExampleFileSystem"
ParameterPath = "SYSTEM\CurrentControlSet\Services\ExampleFileSystem\Parameters"
Disk1       = "Example File System Driver CD"

他のロケール固有の Strings. を作成することで、1 つの国際 INF ファイルを作成できます。INF ファイルの LanguageID セクション。 国際対応 INF ファイルの詳細については、「国際対応 INF ファイルの作成」を参照してください。