我正在尝试使用批处理脚本和.reg
文件来设置一些自定义服务。大多数键都已正确设置,但我需要DependOnService
为某些服务设置键,这些服务通常是多字符串。是否可以从文件中设置此键.reg
,还是需要手动输入?
答案1
REG_MULTI_SZ
文件中的数据.reg
必须以十六进制编码。如果内容永远不会改变,您可以在注册表中创建一个包含数据的虚拟项,然后将其导出,并根据需要进行调整。
如果确实发生了变化,使用 Windows 附带的程序来添加它可能会容易得多reg
。为此,请reg
按以下格式调用:
Reg Add <KEY> /v <NAME> /t REG_MULTI_SZ /d <DATA> /s <SEPERATOR>
分隔符开关是可选的。如果不使用,要写入的字符串应该用空字符 ( \0
) 的转义序列分隔。例如,要添加一个名为Flair
to 的项目,HKLM\SOFTWARE\WhizBang\Excite-O-Rama
其中包含字符串foo
, bar
,baz
您需要运行:
Reg Add HKLM\SOFTWARE\WhizBang\Excite-O-Rama /v Flair /t REG_MULTI_SZ /d foo\0bar\0baz
要用逗号分隔数据,您可以运行:
Reg Add HKLM\SOFTWARE\WhizBang\Excite-O-Rama /v Flair /t REG_MULTI_SZ /d foo,bar,baz /s ,
有关详细信息,请参阅 Microsoft DocsReg
命令。
答案2
dword:
=DWORD
hex(2):
= 可扩展字符串hex(7):
= 多字符串
ADWORD
是 32 位无符号整数(十进制范围:0
- 4294967295
),在注册表中,aDWORD
始终以 开头0x
,后面跟着 8 位数字0x
。这可以是十进制或十六进制格式;例如,1000
可以写成0x00001000
或0x000003e8
。
DWORDS
只能使用数字0
- 9
。任何类型的字符串始终使用 ASCII,并且在 ACSII 中1000
只能写为31,30,30,30
。对于字符串数据类型,ASCII 在后台工作而您甚至不知道,因为计算机只理解 1 和 0。
对于 Expandable-String 和 Multi-String 数据类型,它们将您的条目保存为一系列十六进制格式的 ASCII 代码,以逗号和十六进制零分隔;因此 Expandable-String 将1000
是hex(2):31,00,30,00,30,00,30,00
让我们转换%PROGRAMFILES%
成一个可扩展字符串:
- 使用ASCII 到十六进制转换工具
%PROGRAMFILES%
,在文本框中输入用户定义的输出分隔符:%
,选择转换,它会给你:%25%50%52%4F%47%52%41%4D%46%49%4C%45%53%25
- 将该结果复制/粘贴到文本编辑器中:将第一个移到
%
末尾,查找/替换所有%
并,00,
删除字符串末尾的逗号。您应该得到:25,00,50,00,52,00,4F,00,47,00,52,00,41,00,4D,00,46,00,49,00,4C,00,45,00,53,00,25,00
- 最后:
hex(2):25,00,50,00,52,00,4F,00,47,00,52,00,41,00,4D,00,46,00,49,00,4C,00,45,00,53,00,25,00
本课包含对任何未加密的十六进制编码注册表项进行逆向工程所需的所有知识。