• Администрация SafeZone приветствует вас на нашем форуме!
    Если вы больше не желаете видеть рекламу при просмотре тем и сообщений - то достаточно просто зарегистрироваться. Для зарегистрированных пользователей реклама не отображается.

Windows Параметр REG_MULTI_SZ

Кирилл

Команда форума
Администратор
Сообщения
13,027
Симпатии
5,639
#1
Все знают что такое параметры реестра.
Предлагаю начать более серьезное знакомство с ними.



REG_MULTI_SZ




REG_MULTI_SZ - Многострочное поле.
Двоичные значения,содержащие список строк кодированых в шестнадцатиричном формате.
Редактор реестра отображает данные уже в удобной для чтения форме,каждую строку с новой строки.
Строки разделяются символом null 0x00,параметр заканчивается двойным символом Null 00,00,00,00-таким образом в реестре обозначается конец записи текстовых строк в параметре,конец списка.

Просмотрев его значение в редакторе реестра мы можем увидеть многостроковые значения,разного регистра и даже языка.
Как правило о назначении параметра можно предполагать исходя из его месторасположения и содержимого.


На первый взгляд это вроде бы и все?

Но чем интересен синтаксис реестра-так это своей неординарностью и разнообразием.
Давайте попробуем произвести экспорт в reg-файл любого элемента реестра,имеющего в себе параметр REG_MULTI_SZ.


А затем откроем в любом текстовом редакторе.

Получим примерно такую абракадабру:

Код:
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\REG]
"REG"=hex(7):30,04,00,00,00,00
Тут уже становится непонятненько)))

Вот ,собственно это и разберем в деталях.

Итак,в reg-файлах параметр REG_MULTI_SZ нам виден как hex(7):
Это нам стало известно еще из этой темы.

Далее следует числовой код,который в случае чего можно интерпретировать скриптом например,или же самостоятельно.

Каждый знак ,который будет записан в реестр является комбинацией 4 чисел вида: **,**,
Например из нашего примера значение 30,04, эквивалентно букве а .

Причем значение 04, присутствует всегда у символов Кириллицы,а первые две цифры будут изменяться согласно коду буквы.

А вот пример прописной (большой) буквы Б : 11,04,
Тут ситуация аналогична.

Далее следуют восемь нолей: 00,00,00,00

Это завершение параметра.
То есть если строка одна-в конце всегда будет 00,00,00,00 ,а если это несколько строк -в конце каждой строки будет по две пары нолей: 00,00, но вот в последней строке параметра конечно же будет четыре пары ноликов: 00,00,00,00
Дело в том, что regedit (при сохранении reg-файла в Unicode) в параметрах типов REG_EXPAND_SZ и REG_MULTI_SZ к каждому байту добавляет лишний нулевой байт. Для REG_EXPAND_SZ нужды в доп. обработке не возникает, т.к. там нулевые байты недопустимы по определению и они просто все обрезаются, а в REG_MULTI_SZ нулевой байт - это перевод строки.

Например запись
Код:
б
б
Будет выглядеть как:
Код:
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\REG]
"REG"=31,04,00,00,31,04,00,00,00,00
Схема: буква(31,04)-перенос строки(00,00,)-буква(31,04,)-завершение параметра(00,00,00,00).

Думаю тут все понятно,далее просто приведу таблицу символов,которую собрал на досуге:

Таблица символов



Таблица символов



Таблица символов




Если какие либо символы нужны и их нет в таблице-пишите мне в личные сообщения,добавлю.
 
Последнее редактирование модератором: