Реестр Windows Понимание параметра реестра REG_MULTI_SZ

Кирилл

Команда форума
Администратор
Ассоциация VN
Сообщения
14,053
Реакции
5,745
Все знают что такое параметры реестра.
Предлагаю начать более серьезное знакомство с ними.



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).

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

Таблица символов
СимволКод символаСимволКод символа
Английские прописные (большие)Английские строчные (маленькие)
A41,00a61,00
B42,00b62,00
C43,00c63,00
D44,00d64,00
E45,00e65,00
F46,00f66,00
G47,00g67,00
H48,00h68,00
I49,00i69,00
J4a,00j6a,00
K4b,00k6b,00
L4c,00l6c,00
M4d,00m6d,00
N4e,00n6e,00
O4f,00o6f,00
P50,00p70,00
Q51,00q71,00
R52,00r72,00
S53,00s73,00
T54,00t74,00
U55,00u75,00
V56,00v76,00
W57,00w77,00
X58,00x78,00
Y59,00y79,00
Z5a,00z7a,00

Таблица символов
СимволКод символаСимволКод символа
Русские прописные (большие)Русские строчные (маленькие)
А10,04,а30,04,
Б11,04,б31,04,
В12,04,в32,04,
Г13,04,г33,04,
Д14,04,д34,04,
Е15,04,е35,04,
Ё01,04,ё51,04,
Ж16,04,ж36,04,
З17,04,з37,04,
И18,04,и38,04,
Й19,04,й39,04,
К1a,04,к3a,04,
Л1b,04,л3b,04,
М1c,04,м3c,04,
Н1d,04,н3d,04,
О1e,04,о3e,04,
П1f,04,п3f,04,
Р20,04,р40,04,
С21,04,с41,04,
Т22,04,т42,04,
У23,04,у43,04,
Ф24,04,ф44,04,
Х25,04,х45,04,
Ц26,04,ц46,04,
Ч27,04,ч47,04,
Ш28,04,ш48,04,
Щ29,04,щ49,04,
Ь2c,04,ь4c,04,
Ъ2a,04,ъ4a,04,
Э2d,04,э4d,04,
Ю2e,04,ю4e,04,
Я2f,04,я4f,04,



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

СимволКод символаСимволКод символа
ЦифрыЗнаки
131-2d,00
232_5f,00
333=3d,00
434+2b,00
535\\5c,00
636!21
737@40
838#23
939$24
030%25
^5e,00
&26
*2a,00
(28
)29
знак"вертикальный слэш"7c,00
/2f,00
<3c,00
>3e,00
[5b,00
]5d,00
{7b,00
}7d,00
~7e,00
`60
27
\22
;3b,00
:3a,00
Знак пробела20



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