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] 设备接口的注册表项

注意

不能在从 INF DefaultInstall 节引用的 add-registry-section 中使用 HKR

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

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

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

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

操作系统支持一些系统定义的特殊 value-entry-name 关键字。 有关详细信息,请参阅此 “备注 ”部分的末尾。

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

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

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

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

0x00000004 (FLG_ADDREG_DELVAL)
从注册表中删除给定的子项,或者从指定的注册表子项中删除指定的 value-entry-name

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

0x00000010 (FLG_ADDREG_KEYONLY)
创建给定的 子项,但忽略提供的任何 value-entry-name 和/或值。

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

注意

此值是指定值条目的默认类型,因此可以在对此类型的值项执行操作的 add-registry-section 中的任何 reg-root= 行中省略标志值。

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

0x00020000 (FLG_ADDREG_TYPE_EXPAND_SZ)
给定 value-entry-name 和/或值为注册表类型REG_EXPAND_SZ

0x00010001 (FLG_ADDREG_TYPE_DWORD)
给定的 value-entry-name 和/或值为注册表类型REG_DWORD

0x00020001 (FLG_ADDREG_TYPE_NONE)
给定 value-entry-name 和/或值为注册表类型REG_NONE

value
这可以选择为要添加到给定注册表项的指定 value-entry-name 指定一个新值。 此类 可以是现有项中现有命名值条目的“替换”值、要追加 (标志的值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 字节数据存储为值条目,add-registry 节项将如下所示:

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 条目指定设备的设备类型。 device-type 是在 Wdm.hNtddk.h 中定义的 FILE_DEVICE_XXX 常量的数字值。 0x10001 的标志值指定设备类型值是 REG_DWORD。 有关详细信息,请参阅 指定设备类型

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

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

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

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

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

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

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

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

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 条目指定设备允许的资源冲突。

示例

AddReg 指令引用了本示例中的 (SCSI) Miniport_EventLog_AddReg 部分,该节位于 DDInstall中 AddService 指令引用的 INF 编写器定义的节下此 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

字符串