创建用于微筛选器驱动程序的 INF 文件
文件系统微型筛选器驱动程序需要在 Windows 操作系统上安装 INF 文件。 你可以在微型筛选器示例中找到多个示例 INF 文件,这些文件可用作起点。
从 Windows 10 版本 1903 开始,针对原始驱动程序(包括文件系统微型筛选器)更改了 INF 要求。 有关详细信息,请参阅创建新原始驱动程序。
文件系统筛选器驱动程序的 INF 部分
文件系统筛选器驱动程序的 INF 文件通常包含以下部分:
部分 | 备注 |
---|---|
版本 | 必须 |
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 版本部分中 CatalogFile 条目的说明 |
DestinationDirs 节(必需)
DestinationDirs 部分指定要将微型筛选器驱动程序和应用程序文件复制到的目录。
在本部分和 ServiceInstall 部分中,你可以按系统定义的数值指定已知的系统目录。 有关这些值的列表,请参阅 INF DestinationDirs 部分。 在下面的代码示例中,值 13 引用系统上 OS 定义的驱动程序存储位置。
[DestinationDirs]
Minispy.DriverFiles = 13
Minispy.UserFiles = 13
DefaultInstall 部分(必需)
在 DefaultInstall 部分中,CopyFiles 指令会将微型筛选器驱动程序的驱动程序文件和用户应用程序文件复制到 DestinationDirs 部分中指定的目标。
注意
CopyFiles 指令不应引用目录文件或 INF 文件本身,会自动复制这些文件。
你可以创建单个 INF 文件,以在多个版本的 Windows 操作系统上安装驱动程序。 你可以通过为每个操作系统版本创建 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 值。 这样,微型筛选器驱动程序与旧文件系统筛选器驱动程序不同。
注意
筛选器管理器的 StartType 值是 SERVICE_BOOT_START,其 LoadOrderGroup 值为 FSFilter 基础结构。 这些值可确保在加载任何微型筛选器驱动程序之前始终加载筛选器管理器。
有关 StartType 和 LoadOrderGroup 条目如何确定何时加载驱动程序的详细信息,请参阅什么决定何时加载驱动程序。
与旧筛选器驱动程序不同,StartType 和 LoadOrderGroup 值不会确定微型筛选器驱动程序在微型筛选器实例堆栈中的附加位置。 相反,为微型筛选器实例指定的顺序决定了位置。
ErrorControl 条目指定在系统启动期间服务无法启动时要执行的操作。 微型筛选器驱动程序应指定值 1 (SERVICE_ERROR_NORMAL)。 有关 ErrorControl 条目的详细信息,请参阅 INF AddService 指令。
AddReg 指令会引用 INF 编写器定义的一个或多个 AddRegistry 部分,这些部分包含要存储在新安装服务的注册表中的信息。 微型筛选器驱动程序使用 AddRegistry 部分来定义微型筛选器驱动程序实例并指定默认实例。
依赖项条目指定驱动程序所依赖的任何服务或加载顺序组的名称。 所有微型筛选器驱动程序都必须指定 FltMgr,这是筛选器管理器的服务名称。
AddRegistry 部分(必需)
AddRegistry 部分会将项和值添加到注册表。 微型筛选器驱动程序使用 AddRegistry 部分来定义微型筛选器实例并指定默认实例。 每当筛选器管理器为微型筛选器驱动程序创建新实例时,都会使用此信息。
在 MiniSpy 示例驱动程序中,以下 AddRegistry 节定义了三个实例,其中一个实例被命名为 MiniSpy 示例驱动程序的默认实例。
注意
以下值应在以 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 部分来创建单个国际 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 部分
注意
从 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