INF ClassInstall32 部分
注意
如果正在生成通用或 Windows 驱动程序包,则本部分无效。 请参阅使用通用 INF 文件和 Windows 驱动程序开发入门。
ClassInstall32 部分会为新类中的设备安装一个新的设备安装程序类。
[ClassInstall32] |
[ClassInstall32.nt] |
[ClassInstall32.ntx86] |
[ClassInstall32.ntia64] | (Windows XP and later versions of Windows)
[ClassInstall32.ntamd64] | (Windows XP and later versions of Windows)
[ClassInstall32.ntarm] | (Windows 8 and later versions of Windows)
[ClassInstall32.ntarm64] (Windows 10 version 1709 and later versions of Windows)
AddReg=add-registry-section[,add-registry-section]...
[AddProperty=add-property-section[,add-property-section] ...] (Windows Vista and later versions of Windows)
[Copyfiles=@filename | file-list-section[,file-list-section]...]
[DelReg=del-registry-section[,del-registry-section]...]
[DelProperty=del-property-section[,del-property-section] ...] (Windows Vista and later versions of Windows)
[Delfiles=file-list-section[,file-list-section]...]
[Renfiles=file-list-section[,file-list-section]...]
[BitReg=bit-registry-section[,bit-registry-section]...]
[UpdateInis=update-ini-section[,update-ini-section]...]
[UpdateIniFields=update-inifields-section[,update-inifields-section]...]
[Ini2Reg=ini-to-registry-section[,ini-to-registry-section]...]
条目
AddReg=add-registry-section[,add-registry-section]...
引用一个或多个已命名的部分,这些部分包含要写入注册表的特定类值项。 通常情况下,这至少是为了给新的设备安装程序类一个友好名称,以便其他组件以后可以从注册表中检索并用于打开已安装的该新设备类的设备,或“安装”该设备安装程序类的任何属性页提供程序,等等。
任何 add-registry-section 中的 HKR 规范都指定了包含该类设置的注册表项。 有关其他信息,请参阅以下备注部分。
有关详细信息,请参阅 INF AddReg 指令。
AddProperty=add-property-section[,add-property-section]...
(Windows Vista 及更高版本)引用一个或多个 INF 文件部分,以修改为设备安装程序类设置的设备属性。 只能使用 INF AddProperty 指令来设置 Windows Vista 或更高版本 Windows 操作系统中新增的设备安装程序类属性。
对于 Windows Server 2003、Windows XP 或 Windows 2000 中较早引入并具有相应注册表项值的设备类属性,应继续使用 INF AddReg 指令来设置设备安装程序类属性。 这些准则适用于系统定义的属性和自定义属性。
有关如何使用 AddProperty 指令的详细信息,请参阅使用 INF AddProperty 指令和 INF DelProperty 指令。
Copyfiles=@filename | file-list-section[,file-list-section]...
指定一个要从源介质复制到目标的命名文件,或者引用源介质上类相关文件的一个或多个命名部分,以便传输到目标。 INF 的 DestinationDirs 部分中的 DefaultDestDir 条目指定了要复制的任何特定于类的单个文件的目标目录。
有关详细信息,请参阅 INF CopyFiles 指令。
注意
系统提供的设备安装程序类 INF 文件在本部分中不使用此指令。
DelReg=del-registry-section[,del-registry-section]...
引用一个或多个命名部分,其中指定了在安装类安装程序时从注册表中删除的值项或键。
但是,如果特定 {SetupClassGUID} 已作为已安装类存在,系统安装程序代码随后会忽略在其 Version 部分中指定相同 GUID 值的任何 INF 的 ClassInstall32 部分。 因此,INF 无法从 ClassInstall32 部分替换现有的类安装程序或修改其行为。
有关详细信息,请参阅 INF DelReg 指令。
DelProperty=del-property-section[,del-property-section]...
(Windows Vista 及更高版本)引用一个或多个 INF 文件部分,以删除为设备安装程序类设置的设备属性。 只能使用 INF DelProperty 指令来删除 Windows Vista 或更高版本 Windows 操作系统中新增的设备安装程序类属性。
对于 Windows Server 2003、Windows XP 或 Windows 2000 中较早引入并具有相应注册表项值的设备类属性,应继续使用 INF DelReg 指令来删除设备安装程序类属性。 这些准则适用于系统定义的属性和自定义属性。
有关如何使用 DelProperty 指令的详细信息,请参阅使用 INF AddProperty 指令和 INF DelProperty 指令。
Delfiles=file-list-section[,file-list-section]...
引用一个或多个已命名的部分,在这些部分中指定删除目标上以前安装的与类相关的文件。
有关详细信息,请参阅 INF DelFiles 指令。
Renfiles=file-list-section[,file-list-section]...
引用一个或多个已命名的部分,其中列出了要在目标上重命名的与类相关的文件。
有关详细信息,请参阅 INF RenFiles 指令。
BitReg=bit-registry-section[,bit-registry-section]...
在此部分中有效,但几乎从未使用过。
有关详细信息,请参阅 INF BitReg 指令。
UpdateInis=update-ini-section[,update-ini-section]...
在此部分中有效,但几乎从未使用过。
有关详细信息,请参阅 INF UpdateInis 指令。
UpdateIniFields=update-inifields-section[,update-inifields-section]...
在此部分中有效,但几乎从未使用过。
有关详细信息,请参阅 INF UpdateIniFields 指令。
Ini2Reg=ini-to-registry-section[,ini-to-registry-section]...
在此部分中有效,但几乎从未使用过。
有关详细信息,请参阅 INF UpdateIniFields 指令。
注解
只有在安装新的自定义设备安装程序类时,才应在设备 INF 文件中包含 ClassInstall32 部分。 已安装类中的设备的 INF 文件(无论系统提供的是设备安装程序类还是自定义类)都不应包含 ClassInstall32 部分。 由于系统只有在类尚未安装的情况下才会处理 ClassInstall32 部分,因此不能使用 ClassInstall32 部分来重新安装或更改已安装类的设置。 特别是不能使用 ClassInstall32 部分来为已安装的类添加类共同安装程序或类筛选器驱动程序。 有关如何安装共同安装程序和筛选器驱动程序的信息,请参阅编写共同安装程序和安装筛选器驱动程序。
通常,ClassInstall32 部分有一个或多个 AddReg 指令,用于在注册表中系统提供的 SetupClassGUID 子项下添加条目。 这些条目可以包含特定于类的“友好名称”、类安装路径、类图标、属性页提供程序等。
除 AddReg 和 CopyFiles 外,此处显示的其他指令很少在 ClassInstall32 部分中使用。
为支持驱动程序文件的多平台分发,请构建特定平台的 ClassInstall32 部分。 例如,在 x86 平台上,处理 ClassInstall32 部分的所有系统 SetupAPI 函数将首先搜索 ClassInstall32.ntx86 部分,只有在找不到 ClassInstall32.ntx86 部分时,才会检查未编码的 ClassInstall32 部分。 有关如何使用系统定义的 .nt、.ntx86、.ntia64、.ntamd64、.ntarm 和 .ntarm64 扩展的详细信息,请参阅为多个平台和操作系统创建 INF 文件。
注意
ClassInstall32 部分名称也用于 64 位平台上的安装。
从 Windows 2000 开始,每个已安装的设备都与设备安装程序类相关联。 如果要安装的设备 INF 未与新设备类安装程序关联,或者其在 Version 部分中的ClassGUID= 规范与系统定义的安装程序类 GUID 不匹配,则该设备将与名称为“未知”的设备安装程序类相关联。
任何设备类安装程序的 INF 通常都会在其 ClassInstall32 部分中包含 AddReg 指令,用于定义至少一个命名部分,为其设备类型创建一个友好名称。 在安装该(新)安装程序类的第一个设备时,安装程序代码会根据 INF 的 Version 部分中为 ClassGUID= 条目提供的值,自动在注册表的适当位置创建一个 SetupClassGUID 键。
INF 可以使用其 ClassInstall32 部分中引用的 add-registry 部分来指定属性页提供程序,并对用户界面如何处理其设备类别加以控制。
这种特定于类的 add-registry 部分的一般形式如下:
[SetupClassAddReg]
HKR,,,,%DevClassName% ; device-class friendly name
[HKR,,Installer32,,"class-installer.dll,class-entry-point"]
[HKR,,EnumPropPages32,,"prop-provider.dll,provider-entry-point"]
HKR,,Icon,,"icon-number"
[HKR,,SilentInstall,,1]
[HKR,,NoInstallClass,,1]
[HKR,,NoDisplayClass,,1]
系统会使用指定的图标向用户展示安装程序。
- 如果 Icon 值为正,则表示资源的资源标识符。 如果指定了 Installer32 键,则从类安装程序 DLL 中提取资源;如果指定了 EnumPropPages32 键,则从属性页 DLL 中提取资源。 值“0”表示 DLL 中的第一个图标。 值“1”为保留值。
- 如果 Icon 值为负数,则绝对值就是 SetupApi.DLL 中图标的资源标识符。
在特定于类的注册表项中设置预定义的 SilentInstall/NoDisplayClass 和 NoInstallClass 布尔值项会产生以下效果:
无论是在类安装程序 INF 文件的 DDInstall 部分中指定,还是在随后安装的设备的单独 INF 文件中指定,只要这些设备在各自的版本部分中设置了相同的 ClassGuid={ClassGUID} 规范,并声明自己属于该类,设置 SilentInstall 都会指示安装程序在安装该类设备时不向用户发送需要响应的弹出消息。 例如,光盘和磁盘设备的系统类安装程序以及系统并行端口类安装程序在各自的注册表项中设置了 SilentInstall。
如果特定于类的安装程序要求为其安装的任何设备重启计算机,则其 INF 中特定于类的 add-registry 部分不能包含此值项。
设置 NoDisplayClass 后,“设备管理器”将禁止用户显示此类的所有设备。 例如,打印机和网络驱动程序(包括客户端、服务和协议)的系统类安装程序会在各自的注册表项中设置 NoDisplayClass。
设置 NoInstallClass 表示此类设备无需最终用户手动安装。 例如,即插即用 (PnP) 设备的系统类安装程序会在各自的注册表项中设置 NoInstallClass。
ClassInstall32 部分可包含 AddReg 指令,用于为其安装程序类的设备设置 DeviceType、DeviceCharacteristics 和 Security。 有关详细信息,请参阅 INF AddReg 指令。
示例
此示例显示了 ClassInstall32 部分,以及它使用 AddReg 指令 引用的命名部分。
[ClassInstall32]
AddReg=example_class_addreg
[example_class_addreg]
HKR,,,,%ClassName%
HKR,,Icon,,"-1"
相比之下,此示例设置了一个特定于类的属性页提供程序。 此 INF 还会将类键中的 SilentInstall 和 NoInstallClass 值项设置为 TRUE (1)。
[example_class_addreg]
HKR,,,,%ClassName%
HKR,,EnumPropPages32,,"ExampleBinary.Dll,ExamplePropPageProvider"
HKR,,SilentInstall,,1
HKR,,NoInstallClass,,1
HKR,,Icon,,"101"