Как я могу указать записи REG_EXPAND_SZ в файле .REG?

9

Я пытаюсь использовать пакетный скрипт и .regфайл для настройки некоторых пользовательских сервисов. Большинство ключей настраиваются правильно, но мне нужно установить DependOnServiceключ для некоторых служб, который обычно является многострочным. Можно ли установить этот ключ из .regфайла, или потребуется ввод вручную?

MBraedley
источник

Ответы:

13

REG_MULTI_SZданные в .regфайлах должны быть закодированы в шестнадцатеричном формате. Если содержимое никогда не изменяется, вы можете создать в своем реестре фиктивный элемент с данными, экспортировать его и настроить его в соответствии со своими потребностями.

Если это действительно изменится, вероятно, будет гораздо проще использовать regпрограмму, включенную в Windows, чтобы добавить его. Для этого позвоните regв этом формате:

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

Сепараторный переключатель не является обязательным. Если не используется, записываемые строки должны быть разделены escape-последовательностью для нулевого символа ( \0). Например, чтобы добавить элемент с именем Flairк 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 для этой Regкоманды.

Патчи
источник
4
Отличный ответ (используя .batфайл с regкомандой вместо .regфайла), но почему это говорит о REG_MULTI_SZ, когда вопрос касается REG_EXPAND_SZ?
Norswap
0
  • dword: знак равно DWORD
  • hex(2): = Расширяемая строка
  • hex(7): = Multi-String

A DWORDпредставляет собой 32-разрядное целое число без знака (десятичный диапазон: 0- 4294967295), и в реестре DWORDвсегда начинается с 0xи имеет 8 цифр, которые следуют 0x. Это может быть в десятичном или шестнадцатеричном формате; например, 1000можно записать как 0x00001000или 0x000003e8.

DWORDSможно использовать только цифры 0- 9. Любые строки всегда используют ASCII, а в ACSII 1000могут быть записаны только как 31,30,30,30. Для типа данных String ASCII работает в фоновом режиме, даже если вы не знаете, потому что компьютер понимает только 1 и 0.

Для типов данных Expandable-String и Multi-String они сохраняют ваши записи в виде серии кодов ASCII в шестнадцатеричном формате, разделенных запятыми и шестнадцатеричными нулями; поэтому расширяемая строка 1000будетhex(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

Этот урок содержит все знания, необходимые для обратного инжиниринга любой шестнадцатеричной записи реестра, которая не зашифрована.

DarkReverser
источник
1
Ссылка на hotfile - это просто архив 7z с html-страницей (которая содержит конвертер), хранящейся внутри. Почему бы просто не дать ссылку на саму веб-страницу?
Джон Бенсин
1
Чтобы избежать гниения ссылок, пожалуйста, разместите всю соответствующую информацию в своем ответе. для получения дополнительной информации о том, как ответить на вопросы, см. Как ответить
50-3