如何在.REG文件中指定REG_EXPAND_SZ条目?


9

我正在尝试使用批处理脚本和.reg文件来设置一些自定义服务。大多数键都已正确设置,但是我需要DependOnService为某些服务设置键,通常这是一个多字符串。是否可以从.reg文件中设置此密钥,还是需要手动输入?

Answers:


13

REG_MULTI_SZ.reg文件中的数据必须以十六进制编码。如果内容永远不变,则可以在注册表中使用数据创建一个虚拟项目,将其导出,然后根据需要进行调整。

如果确实发生更改,则使用regWindows附带的程序添加它可能会容易得多。为此,请reg以以下格式调用:

Reg Add <KEY> /v <NAME> /t REG_MULTI_SZ /d <DATA> /s <SEPERATOR>

分隔开关是可选的。如果不使用,应使用空字符(\0)的转义序列分隔要写入的字符串。例如,要添加一个名为项Flair,以HKLM\SOFTWARE\WhizBang\Excite-O-Rama与字符串foobar以及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 Docs中的Reg命令。


4
很好的答案(使用.batreg命令的文件而不是.reg文件),但是当问题与REG_EXPAND_SZ有关时,为什么它谈到REG_MULTI_SZ?
2013年

0
  • dword: = DWORD
  • hex(2): =可扩展字符串
  • hex(7): =多字符串

DWORD是一个32位无符号整数(十进制范围:0- 4294967295),并且,在注册表中,一个DWORD总是与开始0x,并具有8位数字后面0x。可以是十进制或十六进制格式。例如,1000可以写为0x000010000x000003e8

DWORDS只能使用数字0- 9。任何类型的字符串始终使用ASCII,并且在ACSII 1000中只能写为31,30,30,30。对于String数据类型,甚至在您不知道的情况下ASCII都可以在后台运行,因为计算机只能识别1和0。

对于Expandable-String和Multi-String数据类型,这些将您的条目保存为十六进制格式的一系列ASCII代码,并用逗号和十六进制零分隔。这样的扩展字符串1000hex(2):31,00,30,00,30,00,30,00

让我们转换%PROGRAMFILES%成Expandable-String:

  1. 使用ASCII到十六进制转换工具%PROGRAMFILES%在文本框中输入用户定义的输出定界符:%,选择转换,它将为您提供:
    %25%50%52%4F%47%52%41%4D%46%49%4C%45%53%25
  2. 将结果复制/粘贴到文本编辑器中:将第一个移动%到末尾,使用全部查找/替换%,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
  3. 最后:
    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

本课程包含对未加密的十六进制编码的注册表项进行反向工程所需的全部知识。


1
hotfile链接只是一个7z存档,其中存储了html页面(包含转换器)。为什么不只是链接到网页本身?
John Bensin

1
为了避免链接腐烂,请在您的答案中发布所有相关信息。关于如何回答问题请查看更多信息如何回答
50-3
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.