General Paul Lee Project
О... Новости Статьи Софт Кнопки Форум Написать
73144998
General Paul Lee Project

Структура реестра II


Материала для написания этой статьи было собрано достаточно еще два года назад, когда писалась первая часть о реестре Win9x. Но за отсутствием времени, впрочем как и желания, весь накопленный материал был сложен в папку и забыт до поры до времени. Вернувшись к нему в нынешнем апреле в процессе написания очередной версии прогрраммы Registry Viewer с поддержкой WinNT/2000, я обнаружил, что он далеко не полон. Мне пришлось вновь углубиться в исследование, результат которого - эта статья.

Начну с того, что в отличие от Win9x/Me файлов составляющих реестр WinNT/2000, не два и не три, а ни как не меньше шести. Перечислю их: DEFAULT, SAM, SECURITY, SOFTWARE, SYSTEM, ntuser.dat. В Win2000 добавился UsrClass.dat. По названиям файлов не трудно догадаться, какие ветви реестра они содержат. Есть не мало ресурсов описывающих их содержание и назначение, и я не буду вдаваться в эти подробности, а пожалуй уже приступлю к описанию внутреннего строения реестра WinNT/2000.

Реестр состоит из двух типов блоков: заголовочного и блоков данных. Всю информационную нагрузку несут блоки второго типа. Но давайте попорядку.

Все блоки в реестре кратны 4К, видимо в силу 32-х разрядности системы, а потому и единственный заголовочный блок несущий информации на копейку занимает эти 4К на всю катушку. Вот его структура:

    0000:      dword 'regf' - сигнатура файла реестра WinNT/2000
    0004:    8 dword        - набор двойных слов непонятного назначения
    0024:      dword  20h   - возможно размер заголовка блока 'hbin'
    0028:      dword        - размер области данных (кратно 4К)
    002C:      dword        - двойное слово непонятного назначения
    0030: 1CCh bytes        - мусор
    01FC:      dword        - контрольная сумма предыдущих слов
    0200: E00h bytes        - не используется

Далее один за одним (может быть и один) следуют блоки данных следующего вида (опять же кратные 4К):

    n000:      dword 'hbin' - сигнатура блока данных
    n004:      dword        - относительное смещение адресов в блоке (обычно n000h-1000h)
    n008:      dword        - размер блока (указатель на следующий блок)
    n00C:   Some bytes
    n020:           Начало данных текущего блока

Данные распределены по блокам различной структуры и длины, которые могут иметь обозначение типа данных, которые содержат, а могут и не иметь. Идем дальше.

Все типизированные блоки какие мне встречались содержат одну из ниже перечисленных сигнатур:

'nk' - элемент дерева (node key ?)
'lf' - короткий индекс, "оглавление" (location field ? labels field ? list field)
'sk' - элемент защиты (security key ?)
'vk' - параметр (value key ?)
'ri' - связка индексов (relation index ?)
'li' - индекс (labels index ? list index)

В скобках варианты расшифровки сигнатур.

Дальше

General Paul Lee Corruption