为微筛选器驱动程序创建 INF 文件

简介

注意

从 Windows 10 版本 1903 开始,基元驱动程序 ((如文件系统微筛选器驱动程序)的 INF 要求) 更改。 有关详细信息 ,请参阅创建新的基元驱动程序

筛选器驱动程序需要在 Windows 操作系统上安装 INF 文件。 可以在 微筛选器示例中找到示例 INF 文件。

文件系统筛选器驱动程序的 INF 文件通常包含以下部分:

部分 备注
版本 必需
DestinationDirs 可选但建议
DefaultInstall 必需
DefaultInstall.Services 必需
ServiceInstall 必需
AddRegistry 必需
字符串 必需

注意

从 Windows 10 版本 1903 开始,禁止使用 DefaultUninstallDefaultUninstall.Services 部分, (例外) 。 这些部分在以前的 OS 版本中是可选的。

在 64 位版本的 Windows 系统上运行的所有驱动程序必须先签名,然后 Windows 才能加载它们。 有关详细信息 ,请参阅对驱动程序进行签名

版本部分 (必需)

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

下表显示了文件系统微筛选器驱动程序应在 “版本 ”部分中指定的值。

条目
Signature “$WINDOWS NT$”
请参阅 文件系统筛选器驱动程序类和类 GUID
ClassGuid 请参阅 文件系统筛选器驱动程序类和类 GUID
提供程序 在自己的 INF 文件中,应指定 Microsoft 以外的提供程序。
DriverVer 请参阅 INF DriverVer 指令
CatalogFile 对于已签名的防病毒微筛选器驱动程序,此条目包含 WHQL 提供的目录文件的名称。 所有其他微筛选器驱动程序应将此条目留空。 有关详细信息,请参阅 INF 版本部分中CatalogFile 条目的说明

DestinationDirs 部分指定将复制微筛选器驱动程序和应用程序文件的目录。

在本部分和 ServiceInstall 部分中,可以通过系统定义的数值指定已知的系统目录。 有关这些值的列表,请参阅 INF DestinationDirs 部分。 在以下代码示例中,值 12 是指 Drivers 目录 (%windir%\system32\drivers) ,值 10 指 Windows 目录 (%windir%) 。

[DestinationDirs]
DefaultDestDir = 12
Minispy.DriverFiles = 12
Minispy.UserFiles   = 10,FltMgr

DefaultInstall 节 (必需)

DefaultInstall 部分中, CopyFiles 指令将微筛选器驱动程序的驱动程序文件和用户应用程序文件复制到 DestinationDirs 节中指定的目标。

注意

CopyFiles 指令不应引用目录文件或 INF 文件本身。 SetupAPI 会自动复制这些文件。

可以创建单个 INF 文件,在多个版本的 Windows 操作系统上安装驱动程序。 可以通过为每个操作系统版本创建其他 DefaultInstallDefaultInstall.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  = %12%\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 值。 这样,微筛选器驱动程序就不同于旧的文件系统筛选器驱动程序。

注意

筛选器管理器的 StartType 值为 SERVICE_BOOT_START,其 LoadOrderGroup 值为 FSFilter Infrastructure。 这些值可确保在加载任何微筛选器驱动程序之前始终加载筛选器管理器。

有关 StartTypeLoadOrderGroup 条目如何确定何时加载驱动程序的详细信息,请参阅 确定何时加载驱动程序

对于微筛选器驱动程序,与旧文件系统筛选器驱动程序不同, StartTypeLoadOrderGroup 值无法确定微筛选器驱动程序在微筛选器实例堆栈中的附加位置。 此位置由为微筛选器实例指定的高度确定。

ErrorControl 条目指定在系统启动期间服务无法启动时要执行的操作。 微筛选器驱动程序应将值指定为 1 (SERVICE_ERROR_NORMAL) 。 有关 ErrorControl 条目的详细信息,请参阅 INF AddService 指令

AddReg 指令引用一个或多个 INF 编写器定义的 AddRegistry 部分,这些节包含要存储在新安装服务的注册表中的信息。 微筛选器驱动程序使用 AddRegistry 部分来定义微筛选器驱动程序实例并指定默认实例。

Dependencies 条目指定驱动程序所依赖的任何服务或加载顺序组的名称。 所有微筛选器驱动程序都必须指定 FltMgr,这是筛选器管理器的服务名称。

AddRegistry 节 (必需)

AddRegistry 部分将键和值添加到注册表。 微筛选器驱动程序使用 AddRegistry 部分来定义微筛选器实例并指定默认实例。 每当筛选器管理器为微筛选器驱动程序创建新实例时,将使用此信息。

MiniSpy 示例驱动程序中,以下 AddRegistry 部分以及 字符串 部分中的 %strkey% 令牌定义定义了三个实例,其中一个实例被命名为 MiniSpy 示例驱动程序的默认实例。

[Minispy.AddRegistry]
HKR,%RegInstancesSubkeyName%,%RegDefaultInstanceValueName%,0x00000000,%DefaultInstance%
HKR,%RegInstancesSubkeyName%"\"%Instance1.Name%,%RegAltitudeValueName%,0x00000000,%Instance1.Altitude%
HKR,%RegInstancesSubkeyName%"\"%Instance1.Name%,%RegFlagsValueName%,0x00010001,%Instance1.Flags%
HKR,%RegInstancesSubkeyName%"\"%Instance2.Name%,%RegAltitudeValueName%,0x00000000,%Instance2.Altitude%
HKR,%RegInstancesSubkeyName%"\"%Instance2.Name%,%RegFlagsValueName%,0x00010001,%Instance2.Flags%
HKR,%RegInstancesSubkeyName%"\"%Instance3.Name%,%RegAltitudeValueName%,0x00000000,%Instance3.Altitude%
HKR,%RegInstancesSubkeyName%"\"%Instance3.Name%,%RegFlagsValueName%,0x00010001,%Instance3.Flags%

字符串部分 (必需)

Strings 部分定义 INF 文件中使用的每个 %strkey% 令牌。

可以通过创建其他特定于区域设置的 字符串来创建单个国际 INF 文件。INF 文件中的 LanguageID 部分。 有关国际 INF 文件的详细信息,请参阅 创建国际 INF 文件

下面的代码示例演示一个典型的 Strings 部分。

[Strings]
Msft               = "Microsoft Corporation"
MinispyServiceDesc = "Minispy mini-filter driver"
MinispyServiceName = "Minispy"
RegInstancesSubkeyName = "Instances"
RegDefaultInstanceValueName  = "DefaultInstance"
RegAltitudeValueName    = "Altitude"
RegFlagsValueName  = "Flags"

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 部分

注意

禁止使用 DefaultUninstallDefaultUninstall.Services 部分,但从 (Windows 10版本 1903 开始,) 例外。

在版本 1903 之前的Windows 10中,DefaultUninstallDefaultUninstall.Services 部分是可选的,但如果可以卸载驱动程序,则建议使用:

  • DefaultUninstall 包含 DelFilesDelReg 指令,用于删除文件和注册表项。
  • 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