Имя пользователя:
Пароль:
 

Название темы: Регфайл, синтаксис.
Показать сообщение отдельно

Аватара для proxy

Старожил


Сообщения: 460
Благодарности: 152

Профиль | Отправить PM | Цитировать


FlatX007, а дело в том, что вот такая ситуация:

Задача: необходимо создать файл типа .reg, который будет записывать (или обновлять) данные в реестре велечины типа REG_EXPAND_SZ.
В реестре это будет выглядеть так:

Цитата:
Имя величины: SN
Значение величины: VMKJGNDIDNWLDMKJGNDIDNWLD
Тип величины: REG_EXPAND_SZ

А вот в .reg файле это будет выглядеть так:
Цитата:
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\DashSignature\Knagalis]
"SN"=hex(2):56,00,4d,00,4b,00,4a,00,47,00,4e,00,44,00,49,00,44,00,4e,00,57,00,4c,00,44,00,4d,00,4b,0 0,4a,00,47,00,4e,00,44,00,49,00,44,00,4e,00,57,00,4c,00,44,00,00,00

Дело в том, что значения в .reg файле записываются следующим образом:
Цитата:
REG_NONE - hex(0)
REG_BINARY - hex(3) или hex
REG_DWORD - hex(4) или dword
REG_SZ - hex(1) или отсутствие указателя типа
REG_EXPAND_SZ - hex(2)
REG_MULTI_SZ - hex(7)
REG_RESOURCE_LIST - hex(8)
REG_FULL_RESOURCE_DESCRIPTOR - hex(9)

Если тип задан с использованием префикса "hex", то значение установки должно быть записано в виде последовательности чисел (от 0 до 255), разделённых запятыми. Если тип hex(4), то должно быть 4 числа, а в двойное слово они будут собраны в обратной последовательности (т.е. записаны они должны быть от младшего байта к старшему).

Если после префикса hex в скобках указано число 5,6,10 или большее 10, то считается, что тип установки REG_UNKNOWN, а её значение обрабатывается как REG_BINARY. Например, Corel использует тип hex(80000001).

Если тип не указан, то значение установки трактуется как символьная строка и должно быть взято в кавычки.

Если указан тип dword, то значение установки трактуется как шестнадцатиричное число. Оно должно содержать только символы 0-9, a-f, A-F (без кавычек). Символов может быть от 1 до 8.

Соответсвенно появился интерес накатать функции, для форматирования/перекодировки значений реестового типа REG_BINARY, REG_DWORD, REG_SZ и т.д. в формат .reg файла hex(3), hex(4), hex(1) и т.д.
Для типа REG_EXPAND_SZ, ни чего умней не родилось, как это:
Код: Выделить весь код
$sRegKey = 'HKEY_CURRENT_USER\Software\DashSignature\Knagalis'
$sSerial = RegRead($sRegKey, 'SN')

For $i=1 To StringLen($sSerial)
    $sSerialResult &= Hex(Asc(StringMid($sSerial, $i, 1)), 2) & ',00,'
Next
$sSerialResult = 'hex(2):' & $sSerialResult
If StringRight($sSerialResult, 1) == ',' Then $sSerialResult = StringTrimRight($sSerialResult, 1)

$sFileContent = _
    'Windows Registry Editor Version 5.00' & @CRLF & @CRLF & _
    '[' & $sRegKey & ']' & ',00,00' & @CRLF & _
    '"SN"=' & $sSerialResult & @CRLF & @CRLF


Вот и все, в этом и вопрос....осталось немного покодить

-------
Мысли-читатель сломался, может подробней расскажите?
А где исходный код? Или мы стихи обсуждаем?! )) Настройки темы > Решено ?

Это сообщение посчитали полезным следующие участники:

Отправлено: 10:23, 23-06-2009 | #3

Название темы: Регфайл, синтаксис.