Windows Параметр REG_MULTI_SZ

Кирилл

Команда форума
Администратор
Сообщения
13,845
Реакции
6,188
Баллы
913
Все знают что такое параметры реестра.
Предлагаю начать более серьезное знакомство с ними.



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

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

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

Символ| код символа|Символ| код символа
Англиские прописные (большие)|| Англиские строчные (маленькие) |
A|41,00|a|61,00
B|42,00|b|62,00
C|43,00|c|63,00
D|44,00|d|64,00
E|45,00|e|65,00
F|46,00|f|66,00
G|47,00|g|67,00
H|48,00|h|68,00
I|49,00|i|69,00
J|4a,00|j|6a,00
K|4b,00|k|6b,00
L|4c,00|l|6c,00
M|4d,00|m|6d,00
N|4e,00|n|6e,00
O|4f,00|o|6f,00
P|50,00|p|70,00
Q|51,00|q|71,00
R|52,00|r|72,00
S|53,00|s|73,00
T|54,00|t|74,00
U|55,00|u|75,00
V|56,00|v|76,00
W|57,00|w|77,00
X|58,00|x|78,00
Y|59,00|y|79,00
Z|5a,00|z|7a,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,

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

Символ| код символа|Символ| код символа
Цифры|| Знаки |
1|31,00|-|2d,00
2|32,00|_|5f,00
3|33,00|=|3d,00
4|34,00|+|2b,00
5|35,00|\\|5c,00
6|36,00|!|21,00
7|37,00|@|40,00
8|38,00|#|23,00
9|39,00|$|24,00
0|30,00|%|25,00
|| ^|5e,00
|| &|26,00
|| *|2a,00
|| (|28,00
|| )|29,00
|| знак"вертикальный слэш"|7c,00
|| /|2f,00
|| <|3c,00
|| >|3e,00
|| [|5b,00
|| ]|5d,00
|| {|7b,00
|| }|7d,00
|| ~|7e,00
|| `|60,00
|| '|27,00
|| \|22,00
|| ;|3b,00
|| :|3a,00
|| Знак пробела|20,00


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