Windows Параметр REG_MULTI_SZ

Тема в разделе "FAQ по работе с реестром", создана пользователем Kиpилл, 29 июл 2013.

  1. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.232
    Симпатии:
    4.980
    Все знают что такое параметры реестра.
    Предлагаю начать более серьезное знакомство с ними.



    REG_MULTI_SZ




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

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


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

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


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

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

    Код (Text):
    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 нулевой байт - это перевод строки.

    Например запись
    Код (Text):
    б
    б
    Будет выглядеть как:
    Код (Text):
    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).

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

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

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


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

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


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

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



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

Поделиться этой страницей