INF BitReg 指令
BitReg 指令引用一个或多个 INF 编写器定义的部分,用于设置或清除注册表中现有 REG_BINARY 类型值项中的位。 但是,设备/驱动程序 INF 文件中很少使用此指令。
[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)
BitReg=bit-registry-section[,bit-registry-section]...
BitReg 指令可以在上述正式语法说明中的任何部分下指定。 此指令也可以在以下任何 INF 编写器定义的部分中指定:
- 由 DDInstall.Services 部分中的 AddService 指令引用的 service-install-section 或 event-log-install 部分。
- 由 DDInstall.Interfaces 部分中的 AddInterface 指令引用的 add-interface-section。
- 在 InterfaceInstall32 部分中引用的 install-interface-section
BitReg 指令引用的每个命名部分的形式如下:
[bit-registry-section]
reg-root, [subkey], value-entry-name, [flags], byte-mask, byte-to-modify
reg-root, [subkey], value-entry-name, [flags], byte-mask, byte-to-modify
...
bit-registry-section 可以具有任意数量的条目,每个条目单独一行。
条目
reg-root
为此条目中提供的其他值标识注册表树的根。 值可以是下列任一值:
HKCR
HKEY_CLASSES_ROOT 的缩写。
HKCU
HKEY_CURRENT_USER 的缩写。
HKLM
HKEY_LOCAL_MACHINE 的缩写。
HKU
HKEY_USERS 的缩写。
HKR
相对根 - 也就是说,使用该缩写指定的键是相对于与此 BitReg 指令所在 INF 部分相关联的注册表项而言的,如下表所示。
包含 BitReg 指令的 INF 部分 | HKR 引用的注册表项 |
---|---|
INF DDInstall 部分 | 设备的 software key |
INF DDInstall.HW 部分 | 设备的 hardware key |
INF DDInstall.Services 部分 | Services 键 |
注意
HKR 不能在 INF DefaultInstall 部分引用的位注册表部分中使用。
有关存储在 HKEY_LOCAL_MACHINE 根下的驱动程序信息的详细信息,请参阅设备和驱动程序的注册表树和键。
subkey
此可选值可以是在 INF 的 Strings 部分中定义的 %strkey% 标记,也可以是给定 reg-root 下的注册表路径 (key1\key2\key3...),它指定了包含要修改的值项的键。
value-entry-name
指定要修改的(现有)子键中现有 REG_BINARY 类型值项名称。 它既可以表示为“引用字符串”,也可以表示为在 INF 的 Strings 部分中定义的 %strkey% 标记。
flags
此可选的十六进制值表示为系统定义的低字节和高字节标志值的 ORed 位掩码,指定是清除还是设置给定字节掩码中指定的位。 其默认值为 0,即清除注册表 64 位部分中的位。
每个标志的位掩码值如下所示:
0x00000000 (FLG_BITREG_CLEARBITS)
清除 byte-mask 指定的位。
0x00000001 (FLG_BITREG_SETBITS)
设置 byte-mask 指定的位。
0x00004000 (FLG_BITREG_32BITKEY)(Windows XP 及更高版本的 Windows。)
在 32 位注册表中进行指定更改。 如果未指定,则在本机注册表中进行更改。
byte-mask
此字节大小的掩码以十六进制表示,指定是清除还是设置给定 value-entry-name 的当前值中的哪些位。
byte-to-modify
此字节大小的值以十进制表示,指定要修改的 REG_BINARY 类型值中字节的从零开始的索引。
注解
每个 bit-registry-section 名称在 INF 文件中都必须是唯一的,但可以被同一 INF 文件中其他部分的 BitReg 指令引用。 每个 INF-writer-created 部分名称在 INF 文件中都必须唯一,并且必须遵循定义部分名称的一般规则。 有关这些规则的详细信息,请参阅 INF 文件的常规语法规则。
现有 REG_BINARY 类型值项的值也可以通过在 INF 文件其他地方的 add-registry 部分中替代其当前值来进行修改。 有关 add-registry 部分的详细信息,请参阅 AddReg 指令的引用。
使用 BitReg 指令需要定义另一个 INF 文件部分。 但是,现有 REG_BINARY 类型值项的值可以在此类部分中逐位修改,从而保留所有剩余位的值。
示例
以下示例显示了一个虚构应用的位注册表部分。
[AppX_BitReg]
; set first bit of byte 0 in ProgramData value entry
HKLM,Software\AppX,ProgramData,1,0x01,0
; preceding would change value 30,00,10 to 31,00,10
; clear high bit of byte 2 in ProgramData value entry
HKLM,Software\AppX,ProgramData,,0x80,2
; preceding would change value 30,00,f0 to 30,00,70
; set second and third bits of byte 1 in ProgramData value entry
HKLM,Software\AppX,ProgramData,1,0x06,1
; preceding would change value 30,00,f0 to 30,06,f0