INF AddReg 指令

AddReg 指令引用用于修改或创建注册表信息的一个或多个 INF 编写器定义的 _add-registry-sections* 。

[DDInstall] | 
[DDInstall.HW] | 
[DDInstall.CoInstallers] | 
[ClassInstall32] | 
[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) 
[install-interface-section] | 
[service-install-section] | 
[event-log-install] | 
[add-interface-section]

AddReg=add-registry-section[,add-registry-section] ...

每个 add-registry-section 都可以有条目来执行以下操作:

  • 将可能具有初始值项的新键添加到注册表。

  • 向现有注册表项添加新的值项。

  • 修改注册表中特定键的现有值条目。

AddReg 指令引用的每个命名的 add-registry-section 具有以下格式:

[add-registry-section]
reg-root,[subkey],[value-entry-name],[flags],[value][,[value]]
reg-root,[subkey],[value-entry-name],[flags],[value][,[value]]
 ...

[[add-registry-section.security]
"security-descriptor-string"]

add-registry-section 可以具有任意数量的条目,每个条目位于单独的行上。 INF 还可以包含一个或多个可选的 add-registry-section.security 节,每个节指定应用于命名 add-registry-section 中所述的所有注册表值的安全描述符。

reg-root
标识此条目中提供的其他值的注册表树的根。 值可以是下列任一值:

HKCR
HKEY_CLASSES_ROOT缩写

HKCU
HKEY_CURRENT_USER缩写

HKLM
HKEY_LOCAL_MACHINE缩写

香港
HKEY_USERS缩写

HKR
相对根,使用此缩写指定的键相对于与此 AddReg 指令显示的 INF 节关联的注册表项,如下表所示。

包含 AddReg 指令的 INF 节 HKR 引用的注册表项
INF DDInstall 设备的 软件密钥
INF DDInstall。HW 部分 设备 的硬件密钥
INF [service-install-section] 服务密钥
INF [event-log-install] 部分 EventLog 密钥
INF [add-interface-section] 设备接口的注册表项

注意

HKR 不能在从 INF DefaultInstall 节引用的外接程序注册表节中使用。

有关存储在 HKEY_LOCAL_MACHINE 根目录下的驱动程序信息的详细信息,请参阅 设备和驱动程序的注册表树和密钥

子项
此可选值,格式为 INF 的 Strings 节中定义的 %strkey% 标记,或作为给定的 reg-root (key1\key2 key2\key3...) 下的注册表路径,指定以下项之一:

  • 要在给定注册表路径末尾添加到注册表的新子项。
  • 写入此条目中指定的附加值的现有子项 (可能替换给定子项的现有命名值项的值) 。
  • 要添加到注册表的新子项及其初始值条目。

value-entry-name
此可选值命名给定 (现有) 子项 中的现有值项,或创建要在指定 子项中添加的新值项的名称,无论是已存在还是要添加到注册表的新键。 此值可以表示为带引号的字符串,也可以表示为 INF 的 Strings 节中定义的 %strkey% 标记。 (如果为字符串类型值省略此值,则 value-entry-name 是此 key.) 的默认“未命名”值项

操作系统支持某些系统定义的特殊 值条目名称 关键字。 有关详细信息,请参阅此 备注 部分的结尾。

flag
此可选的十六进制值,表示为系统定义的低单词和高字标志值的 ORed 位掩码,定义值条目和/或控制加载项注册表操作的数据类型。

每个标志的位掩码值如下所示:

0x00000001 (FLG_ADDREG_BINVALUETYPE)
给定值为“原始”数据。 (此值与 FLG_ADDREG_TYPE_BINARY.) 相同

0x00000002 (FLG_ADDREG_NOCLOBBER)
阻止给定值替换现有值条目的值。

0x00000004 (FLG_ADDREG_DELVAL)
从注册表中删除给定的子项,或者从指定的注册表子项中删除指定的值项名称

0x00000008 (FLG_ADDREG_APPEND)
将给定 追加到现有命名值项的值。 仅当同时设置FLG_ADDREG_TYPE_MULTI_SZ时,此标志才有效。 如果指定的字符串值已存在,则不会追加指定的字符串值。

0x00000010 (FLG_ADDREG_KEYONLY)
创建给定 的子项,但忽略任何提供的值条目名称和/或值。

0x00000020 (FLG_ADDREG_OVERWRITEONLY)
仅当给定子项中已存在指定的 value-entry-name 时,才重置为所提供的

0x00001000 (FLG_ADDREG_64BITKEY)
(Windows XP 和更高版本的 Windows.) 在 64 位注册表中进行更改。 如果未指定,则对本机注册表进行更改。

0x00002000 (FLG_ADDREG_KEYONLY_COMMON)
(Windows XP 和更高版本的 Windows.) 这与FLG_ADDREG_KEYONLY相同,但也适用于 INF DelReg 指令del-registry-section

0x00004000 (FLG_ADDREG_32BITKEY)
(Windows XP 和更高版本的 Windows.) 在 32 位注册表中进行更改。 如果未指定,则对本机注册表进行更改。

0x00000000 (FLG_ADDREG_TYPE_SZ)
给定的值项和/或值的类型 为 REG_SZ

注意

此值是指定值项的默认类型,因此可以从外接程序注册表节中任何 reg-root= 行中省略标志值,该行对此类型的值项进行操作。

0x00010000 (FLG_ADDREG_TYPE_MULTI_SZ)
给定的值项和/或值是注册表类型 REG_MULTI_SZ。 后面的值字段可以是用逗号分隔的字符串列表。 此规范不需要给定字符串值的任何 NULL 终止符。

0x00020000 (FLG_ADDREG_TYPE_EXPAND_SZ)
给定 的值条目名称和 /或 是注册表类型 REG_EXPAND_SZ

0x00010001 (FLG_ADDREG_TYPE_DWORD)
给定 的值条目名称和 /或 是注册表类型 REG_DWORD

0x00020001 (FLG_ADDREG_TYPE_NONE)
给定 的值条目名称和 /或 是注册表类型 REG_NONE

value
这可以选择为要添加到给定注册表项的指定 值条目名称 指定一个新值。 此类 可以是现有键中现有命名值项的“替换”值、要追加的值 (标志0x00010008) 现有命名 的REG_MULTI_SZ类型值项、要写入现有键的新值项或要添加到注册表的新 子项 的初始值项。

此类 值的 表达式取决于为 标志指定的注册表类型,如下所示:

  • 注册表字符串类型值可以表示为“带引号的字符串”,也可以表示为 INF 文件的 Strings 节中定义的 %strkey% 标记。 此类 INF 指定的值不必在每个字符串末尾包含 NULL 终止符。

  • 注册表数值类型值可以使用 0x 表示法) 或十进制数表示为十六进制 (。

security-descriptor-string
指定要应用于由命名 add-registry-section 创建的所有注册表项的安全描述符。 security-descriptor-string 是一个包含标记的字符串,用于指示 DACL (D:) 安全组件。

如果未指定 add-registry-section.security 节,注册表项将继承父密钥的安全设置。

如果指定了 add-registry-section.security 节,则必须包括以下 ACE,以便安装和升级设备和系统 Service Pack:

  • (A;;GA;;;SY) • 授予对本地系统的所有访问权限。
  • (A;;GA;;;BA) • 授予对内置管理员的所有访问权限。

不要指定授予对非特权用户的写入访问权限的 ACE 字符串。

有关安全描述符字符串的信息,请参阅安全描述符定义语言 (Windows) 。 有关安全描述符字符串格式的信息,请参阅安全描述符定义语言 (Windows) 。

有关如何指定安全描述符的详细信息,请参阅 创建安全设备安装

备注

可以在上述正式语法语句中显示的任一节下指定 AddReg 指令。 还可以在以下任一 INF 编写器定义的节下指定此指令:

每个 add-registry-section 名称必须对 INF 文件是唯一的,但它可由同一 INF 的其他部分中的 AddReg 指令引用。 每个节名称必须遵循常规规则来定义 INF 文件的常规语法规则中所述的节名称。

注意

标志值中低字的下序位区分字符和二进制数据。

若要表示除预定义REG_XXX 类型之外的注册表类型的数目,请在 标志 ORed 的高字中指定一个新类型编号,其低字FLG_ADDREG_BINVALUETYPE。

此类 的数据必须以二进制格式指定为逗号分隔的字节序列。 例如,若要存储新注册表数据类型(如 0x38)的 16 字节数据作为值项,外接程序注册表节项如下所示:

HKR,,MYValue,0x00380001,1,0,2,3,4,5,6,7,8,9,A,B,C,D,E,F

此方法可用于为数值定义新的注册表类型,但不适用于类型 为REG_EXPAND_SZREG_MULTI_SZREG_NONEREG_SZ的值。 有关这些类型的详细信息,请参阅 注册表值类型

特殊 value-entry-name 关键字

为在 HKR AddReg 条目中使用定义了特殊关键字。 使用这些关键字的条目的格式如下所示:

[HKR,,DeviceCharacteristics,0x10001,characteristics] 
[HKR,,DeviceType,0x10001,device-type] 
[HKR,,Security,,security-descriptor-string] 
[HKR,,UpperFilters,0x10000,service-name] 
[HKR,,LowerFilters,0x10000,service-name] 
[HKR,,Exclusive,0x10001,exclusive-device] 
[HKR,,EnumPropPages32,,"prop-provider.dll,provider-entry-point"]
[HKR,,LocationInformationOverride,,"text-string"] 
[HKR,,ResourcePickerTags,,"text-string"] 
[HKR,,ResourcePickerExceptions,,"text-string"] ,

下面介绍了使用这些特殊关键字的 HKR AddReg 条目:

DeviceCharacteristics
DeviceCharacteristics HKR AddReg 条目指定设备的特征。 特征值是一个数值,该值是在 Wdm.hNtddk.h 中定义的一个或多个 FILE_* 文件特征值上使用 OR 的结果。

只能在 INF 中指定以下值:

#define FILE_REMOVABLE_MEDIA            0x00000001
#define FILE_READ_ONLY_DEVICE           0x00000002
#define FILE_FLOPPY_DISKETTE            0x00000004
#define FILE_WRITE_ONCE_MEDIA           0x00000008
#define FILE_DEVICE_SECURE_OPEN         0x00000100

有关这些值的说明,请参阅 IoCreateDevice

使用 DeviceCharacteristics 条目指定的特征值是 ORed,每个调用 IoCreateDevice 时都指定了这些值,用于在设备堆栈上创建设备对象。 在添加所有设备对象之后,但在设备启动之前,将发生 OR 操作。

特征值 (包括零个值) 会替代在关联类安装程序 INF 中指定的任何类范围设备特征。

有关设备特征的详细信息,请参阅 指定设备特征

DeviceType
DeviceType HKR AddReg 条目指定设备的设备类型。 设备类型是在 Wdm.hNtddk.h 中定义的 FILE_DEVICE_XXX 常量的数字值。 0x10001的标志值指定设备类型值是 REG_DWORD。 有关详细信息,请参阅 指定设备类型

类安装程序 INF 应指定应用于类中所有设备或几乎所有设备的设备类型。 例如,如果类中的设备的类型为 FILE_DEVICE_CD_ROM,请指定 设备类型的 0x02。 如果设备 INF 为 DeviceType 指定值,它将替代类安装程序设置的值(如果有)。 如果类或设备 INF 指定 DeviceType 值,则 PnP 管理器会将该类型应用于由设备总线驱动程序创建的 PDO (PDO) 的物理设备对象

安全性
安全 HKR AddReg 条目指定设备的安全描述符。 security-descriptor-string 是一个包含标记的字符串,用于指示 DACL (D:) 安全组件。

类安装程序 INF 可以为设备类指定安全描述符。 设备 INF 可以为单个设备指定安全描述符,从而替代类的安全性。 如果类和/或设备 INF 指定 安全描述符字符串,PnP 管理器会将描述符传播到设备 ( DOS 的所有设备对象) 。 这包括函数设备对象 (FDO) 、可选的 筛选器 DO 和 PDO。

有关安全描述符字符串格式的信息,请参阅Microsoft Windows SDK文档。

有关如何指定安全描述符的详细信息,请参阅 创建安全设备安装

UpperFilters
UpperFilters HKR AddReg 条目指定 PnP 上筛选器驱动程序。 DDInstall 中的此项。HW 部分定义一个或多个特定于设备的上层筛选器驱动程序。 在 ClassInstall32 部分中,此条目定义一个或多个类范围的上筛选器驱动程序。

LowerFilters
LowerFilters HKR AddReg 条目指定 PnP 下筛选器驱动程序。 DDInstall 中的此项。HW 部分定义一个或多个特定于设备的较低筛选器驱动程序。 在 ClassInstall32 部分中,此条目定义一个或多个类范围的较低筛选器驱动程序。

独占
如果存在并设置为“1”,则 为独占 HKR AddReg 条目,指定设备是 独占设备。 否则,设备不会被视为独占。 有关详细信息,请参阅 指定对设备对象的独占访问

EnumPropPages32
EnumPropPages32 HKR AddReg 条目指定动态链接库的名称 (DLL) 文件,该文件是特定于设备的属性页提供程序。 它还指定由 DLL 实现的 ExtensionPropSheetPageProc 回调函数的名称。 有关属性页和函数的详细信息,请参阅适用于 Windows 7 和 .NET Framework 4.0 的 Microsoft Windows 软件开发工具包 (SDK) 。

重要

DLL 和 ExtensionPropSheetPageProc 回调函数的名称都必须括在引号 (“) 中。

LocationInformationOverride
(Windows XP 及更高版本的 Windows) LocationInformationOverride HKR AddReg 条目可用于指定描述设备物理位置的文本字符串。 它会替代设备的总线驱动程序为响应IRP_MN_QUERY_DEVICE_TEXT请求而提供的 LocationInformation 字符串。

ResourcePickerTags
ResourcePickerTags HKR AddReg 条目指定设备的资源选取器标记。

ResourcePickerExceptions
ResourcePickerExceptions HKR AddReg 条目指定设备允许的资源冲突。

示例

DDInstall 中的 AddService 指令引用的 INF 编写器定义的节下,AddReg 指令引用了此示例中的 (SCSI) Miniport_EventLog_AddReg 节此 INF 的服务部分。

[Miniport_EventLog_AddReg]
HKR,,EventMessageFile,0x00020000,"%%SystemRoot%%\System32\IoLogMsg.dll" 
; double quotation marks delimiters in preceding entry prevent truncation 
; if line wraps
 
HKR,,TypesSupported,0x00010001,7 

请注意,可以按十六进制格式指定标志值,如示例所示,也可以定义字符串占位符,例如 %FLG_ADDREG_TYPE_DWORD% 在每个 INF 文件的 [Strings] 节中。

另请参阅

AddInterface

AddService

BitReg

ClassInstall32

DDInstall

DDInstall。CoInstallers

DDInstall。硬件

DDInstall。接口

DDInstall。服务

DelReg

InterfaceInstall32

字符串