ミニフィルター ドライバー用の INF ファイルの作成
ファイル システム ミニフィルター ドライバーを Windows オペレーティング システムにインストールするには、INF ファイルが必要です。 ミニフィルターのサンプルには、出発点として使用できるいくつかのサンプル INF ファイルがあります。
Windows 10 バージョン 1903 以降、プリミティブ ドライバー (ファイル システム ミニフィルターを含む) の INF 要件が変更されました。 詳細については、「新しいプリミティブ ドライバーの作成」を参照してください。
ファイル システム フィルター ドライバーの INF セクション
ファイル システム フィルター ドライバーの INF ファイルには、通常、次のセクションが含まれています。
セクション | メモ |
---|---|
Version | 必須 |
DestinationDirs | 必須 |
DefaultInstall | 必須 |
DefaultInstall.Services | 必須 |
ServiceInstall | 必須 |
AddRegistry | 必須 |
文字列 | 必須 |
Windows 10 バージョン 1903 以降では、DefaultUninstall セクションと DefaultUninstall.Services セクションが禁止されています (例外あり)。 これらのセクションは、以前の OS バージョンでは省略可能でした。
64 ビット版の Windows システムで実行されるすべてのドライバーは、Windows によって読み込まれるためには署名されている必要があります。 詳細については、「ドライバーへの署名」を参照してください。
Version セクション (必須)
Version セクションでは、次の例のように、ミニフィルター ドライバーの種類によって決まるクラスと GUID を指定します。
[Version]
Signature = "$WINDOWS NT$"
Class = "ActivityMonitor"
ClassGuid = {b86dff51-a31e-4bac-b3cf-e8cfe75c9fc2}
Provider = %Msft%
DriverVer = 10/09/2001,1.0.0.0
CatalogFile =
PnpLockdown = 1
次の表に、ファイル システム ミニフィルター ドライバーが Version セクションに指定する必要がある値を示します。
入力 | 値 |
---|---|
Signature | "$WINDOWS NT$" |
クラス | 「ファイル システム フィルター ドライバー クラスとクラス GUID」を参照してください。 |
ClassGuid | 「ファイル システム フィルター ドライバー クラスとクラス GUID」を参照してください。 |
プロバイダー | 独自の INF ファイルには、Microsoft 以外のプロバイダーを指定する必要があります。 |
DriverVer | 「INF DriverVer ディレクティブ」を参照してください。 |
CatalogFile | 署名されたウイルス対策ミニフィルター ドライバーの場合、このエントリには WHQL 提供カタログ ファイルの名前が含まれます。 他のすべてのミニフィルター ドライバーでは、このエントリを空白のままにする必要があります。 詳細については、INF Version セクションの CatalogFile エントリの説明を参照してください。 |
DestinationDirs セクション (必須)
DestinationDirs セクションでは、ミニフィルター ドライバーとアプリケーション ファイルのコピー先のディレクトリを指定します。
このセクションおよび ServiceInstall セクションでは、システム定義の数値によって既知のシステム ディレクトリを指定できます。 これらの値の一覧については、「INF DestinationDirs セクション」を参照してください。 次のコード例の値 13 は、システム上の OS 定義のドライバー ストアの場所を参照しています。
[DestinationDirs]
Minispy.DriverFiles = 13
Minispy.UserFiles = 13
DefaultInstall セクション (必須)
DefaultInstall セクションでは、CopyFiles ディレクティブによって、DestinationDirs セクションに指定されている宛先にミニフィルター ドライバーのドライバー ファイルとユーザーアプリケーション ファイルがコピーされます。
Note
CopyFiles ディレクティブで、カタログ ファイルまたは INF ファイル自体を参照しないでください。これらのファイルは自動的にコピーされます。
ドライバーを複数のバージョンの Windows オペレーティング システムにインストールするために、1 つの INF ファイルを作成できます。 オペレーティング システム バージョンごとに DefaultInstall セクションと DefaultInstall.Services セクションを作成することで、この種類の INF ファイルを作成できます。 各セクションには、適用先のオペレーティング システムのバージョンを示す修飾 (.ntx86、.ntia64、.nt など) を含むラベルが付けられます。 この種類の INF ファイルの作成の詳細については、「複数のプラットフォームとオペレーティング システム用の INF ファイルの作成」を参照してください。
次のコード例は、一般的な DefaultInstall セクションを示しています。
[DefaultInstall.NTamd64]
OptionDesc = %MinispyServiceDesc%
CopyFiles = Minispy.DriverFiles, Minispy.UserFiles
DefaultInstall.Services セクション (必須)
DefaultInstall.Services セクションには、次のコード例のように、特定のドライバーのサービスが読み込まれる方法とタイミングを制御する AddService ディレクティブが含まれます。
[DefaultInstall.NTamd64.Services]
AddService = %MinispyServiceName%,,Minispy.Service
ServiceInstall セクション (必須)
ServiceInstall セクションには、ドライバー サービスの読み込みに使用される情報が含まれています。 次のコード例のように、MiniSpy サンプル ドライバーでは、このセクションの名前は "Minispy.Service" です。 ServiceInstall セクションの名前は、DefaultInstall.Services セクションのAddService ディレクティブに指定されている必要があります。
[Minispy.Service]
DisplayName = %MinispyServiceName%
Description = %MinispyServiceDesc%
ServiceBinary = %13%\minispy.sys
ServiceType = 2 ; SERVICE_FILE_SYSTEM_DRIVER
StartType = 3 ; SERVICE_DEMAND_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL%
LoadOrderGroup = "FSFilter Activity Monitor"
AddReg = Minispy.AddRegistry
Dependencies = FltMgr
ServiceType エントリは、サービスの種類を指定します。 ミニフィルター ドライバーでは、値 2 (SERVICE_FILE_SYSTEM_DRIVER) を指定する必要があります。 ServiceType エントリの詳細については、「INF AddService ディレクティブ」を参照してください。
StartType エントリは、サービスを起動するタイミングを指定します。 次の表に、StartType に指定できる値と、対応する開始の種類を示します。
値 | 説明 |
---|---|
0x00000000 | SERVICE_BOOT_START |
0x00000001 | SERVICE_SYSTEM_START |
0x00000002 | SERVICE_AUTO_START |
0x00000003 | SERVICE_DEMAND_START |
0x00000004 | SERVICE_DISABLED |
これらの開始の種類の詳細については、「ドライバーが読み込まれるタイミングを決定する方法」の「ドライバーの開始の種類」を参照してください。
LoadOrderGroup エントリによって、フィルター マネージャーに、ミニフィルター ドライバーとレガシ ファイル システム フィルター ドライバー間の相互運用性を確保するために必要な情報が提供されます。 開発しているミニフィルター ドライバーの種類に適した LoadOrderGroup 値を指定する必要があります。 読み込み順序グループを選択するには、「ミニフィルター ドライバーの読み込み順序グループと属性」を参照してください。
ミニフィルター ドライバーの開始の種類が SERVICE_BOOT_START でない場合でも、LoadOrderGroup 値を指定する必要があります。 このように、ミニフィルター ドライバーはレガシ ファイル システム フィルター ドライバーとは異なります。
Note
フィルター マネージャーの StartType 値は SERVICE_BOOT_START、LoadOrderGroup は FSFilter Infrastructure です。 これらの値により、常にミニフィルター ドライバーが読み込まれる前にフィルター マネージャーが読み込まれるようになります。
StartType エントリと LoadOrderGroup エントリによって、ドライバーがいつ読み込まれるかが決まる方法については、「ドライバーが読み込まれるタイミングを決定する方法」を参照してください。
従来のフィルター ドライバーとは異なり、StartType と LoadOrderGroup の値によって、ミニフィルター インスタンス スタックにミニフィルター ドライバーがアタッチされる場所は決まりません。 代わりに、ミニフィルター インスタンスに指定された高度 (altitude) によってこの場所が決まります。
ErrorControl エントリは、システムの起動時にサービスが開始できなかった場合に実行するアクションを指定します。 ミニフィルター ドライバーでは、値 1 (SERVICE_ERROR_NORMAL) を指定する必要があります。 ErrorControl エントリの詳細については、「INF AddService ディレクティブ」を参照してください。
AddReg ディレクティブは、INF ライター定義の 1 つ以上の AddRegistry セクション (新しくインストールされるサービスのためにレジストリに格納される情報を含む) を参照します。 ミニフィルター ドライバーは、AddRegistry セクションを使用して、ミニフィルター ドライバー インスタンスの定義や既定のインスタンスの指定を行います。
Dependencies エントリは、ドライバーが依存するサービスまたは読み込み順序グループの名前を指定します。 すべてのミニフィルター ドライバーで、FltMgr (フィルター マネージャーのサービス名) を指定する必要があります。
AddRegistry セクション (必須)
AddRegistry セクションでは、キーと値がレジストリに追加されます。 ミニフィルター ドライバーは、AddRegistry セクションを使用して、ミニフィルター インスタンスの定義や既定のインスタンスの指定を行います。 この情報は、フィルター マネージャーがミニフィルター ドライバーの新しいインスタンスを作成するときに常に使用されます。
次に示す MiniSpy サンプル ドライバーの AddRegistry セクションでは、3 つのインスタンスが定義され、そのうちの 1 つは MiniSpy サンプル ドライバーの既定のインスタンスとして名前が付けられています。
Note
Windows 11 バージョン 24H2 以降では、次に示す各値が Parameters サブキーの下に存在する必要があります。
[Minispy.AddRegistry]
HKR,"Parameters","SupportedFeatures",0x00010001,0x3
HKR,"Parameters\Instances","DefaultInstance",0x00000000,%DefaultInstance%
HKR,"Parameters\Instances\"%Instance1.Name%,"Altitude",0x00000000,%Instance1.Altitude%
HKR,"Parameters\Instances\"%Instance1.Name%,"Flags",0x00010001,%Instance1.Flags%
HKR,"Parameters\Instances\"%Instance2.Name%,"Altitude",0x00000000,%Instance2.Altitude%
HKR,"Parameters\Instances\"%Instance2.Name%,"Flags",0x00010001,%Instance2.Flags%
HKR,"Parameters\Instances\"%Instance3.Name%,"Altitude",0x00000000,%Instance3.Altitude%
HKR,"Parameters\Instances\"%Instance3.Name%,"Flags",0x00010001,%Instance3.Flags%
Strings セクション (必須)
Strings セクションでは、INF ファイルで使用される各 %strkey% トークンを定義します。
INF ファイルに追加のロケール固有の Strings.LanguageID セクションを作成することで、1 つの国際対応 INF ファイルを作成できます。 国際対応 INF ファイルの詳細については、「国際対応 INF ファイルの作成」を参照してください。
次のコード例は、一般的な Strings セクションを示しています。
[Strings]
Msft = "Microsoft Corporation"
MinispyServiceDesc = "Minispy mini-filter driver"
MinispyServiceName = "Minispy"
DefaultInstance = "Minispy - Top Instance"
Instance1.Name = "Minispy - Middle Instance"
Instance1.Altitude = "370000"
Instance1.Flags = 0x1 ; Suppress automatic attachments
Instance2.Name = "Minispy - Bottom Instance"
Instance2.Altitude = "365000"
Instance2.Flags = 0x1 ; Suppress automatic attachments
Instance3.Name = "Minispy - Top Instance"
Instance3.Altitude = "385000"
Instance3.Flags = 0x1 ; Suppress automatic attachments
DefaultUninstall セクションおよび DefaultUninstall.Services セクション
Note
Windows 10 バージョン 1903 以降では、DefaultUninstall セクションと DefaultUninstall.Services セクションが禁止されています (例外あり)。
バージョン 1903 よりも前の Windows 10 では、DefaultUninstall セクションと DefaultUninstall.Services セクションはオプションでしたが、ドライバーをアンインストールできる場合は推奨されていました。
- DefaultUninstall には、ファイルとレジストリ エントリを削除するための DelFiles ディレクティブと DelReg ディレクティブが含まれていました。
- DefaultUninstall.Services には、ミニフィルター ドライバーのサービスを削除するための DelService ディレクティブが含まれていました。 DelService ディレクティブでは、削除前にサービスを停止するために常に SPSVCINST_STOPSERVICE フラグ (0x00000200) が指定されました。
次の例では、Windows 10 バージョン 1903 よりも前の典型的な DefaultUninstall セクションと DefaultUninstall.Services セクションを示しています。
[DefaultUninstall.NTamd64]
DelFiles = Minispy.DriverFiles, Minispy.UserFiles
DelReg = Minispy.DelRegistry
[DefaultUninstall.NTamd64.Services]
DelService = Minispy,0x200