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

Не стесняйтесь обращаться с проблемами по реестру. Постараюсь помочь с восстановлением, экспортом, отвечу на интересующие вопросы.
Отсюда можно написать письмо (прямо с сайта), или пошлите сообщение по icq (так быстрее).

Справочник по внутренним структурам файла реестра НТ
Со времени написания заметок о внутренней структуре реестра НТ прошло уже достаточно времени. Появились новые блоки, распознаны неизвестные ранее элементы структур. Не буду пересказывать содержание предыдущих статей, только напомню несколько моментов.

1. Все адреса (ссылки между блоками) в файле начинаются от первого сегмента данных, т.е. для нахождения блока в файле к адресу надо прибавить 1000h (размер заголовка файла, после которого сразу начинается первый сегмент данных);
2. Все сегменты и блоки следуют друг за другом вплотную без промежутков.
3. Блок с отрицательным размером используется (реальный размер - абсолютное значение), с положительным размером - свободный;
4. Пустая ссылка (null) равна -1 (dword 0FFFFFFFFh);
5. Корневой ключ не должен иметь ссылку на родителя.

Формат файла реестра
Заголовок1-й сегмент2-й сегмент ...N-й сегмент

Формат сегмента данных
Заголовок1-й блок2-й блок ...N-й блок

Заголовок файла реестра
0000hdword66676572h ( regf ) - сигнатура
0004hdwordномер открытой и закрытой транзакции; равны, если транзакции завершены
0008hdword
000Chqwordмомент начала транзакции; 0 при завершенной транзакции
0014hdwordнеизвестно; должно быть 1
0018hdwordверсия файла
001Chdwordнеизвестно; должно быть 0 (по некоторым данным - подверсия)
0020hdwordнеизвестно; должно быть 1
0024hdwordадрес корневого ключа
0028hdwordразмер области данных
002Chdwordнеизвестно; должно быть между 1 и 8
0030h460 bytesне используется; может содержать путь к файлу реестра
01CChdwordконтрольная сумма заголовка
0200h3584 bytesне используется; выравнивание до границы 4К

Заголовок сегмента данных
00hdword6E696268h ( hbin ) - сигнатура
04hdwordсобственный адрес
08hdwordразмер сегмента
0Chdwordнеизвестно; должно быть 0
10hdwordнеизвестно; должно быть 0
14hqwordвремя начала изменения; похоже используется в транзакциях; должно быть 0
1Chdwordразмер сегмента (резервная копия)

Блок ключа
00hdwordразмер блока
04hword6B6Eh ( nk ) - сигнатура
06hwordфлаг
08hqwordвремя создания
10hdwordне известно
14hdwordуказатель на родителя
18hdwordколичество потомков
1Chdwordнеизвестно
20hdwordуказатель на индекс по потомкам
24hdwordнеизвестно
28hdwordколичество параметров
2Chdwordуказатель на индекс по параметрам
30hdwordуказатель на блок защиты
34hdwordуказатель на имя класса
38hdwordнеизвестно
3Chdwordнеизвестно
40hdwordнеизвестно
44hdwordнеизвестно
48hdwordнеизвестно
4Chwordразмер имени ключа
4Ehwordразмер имени класса
50hимя ключа

Блок параметра
00hdwordразмер блока
04hword6B76h ( vk ) - сигнатура
06hwordразмер имени параметра
08hdwordразмер значения параметра
0Chdwordзначение параметра, указатель на блок значения параметра или указатель на корневой блок индеса по фрагментам значения параметра
10hdwordтип параметра
14hwordнеизвестно
16hwordвыравнивание
18hимя параметра

Блок защиты
00hdwordразмер блока
04hword6B73h ( sk ) - сигнатура
06hwordнеизвестно
08hdwordуказатели на предыдущий и на следующий блоки защиты; блоки защиты образуют, таким образом, своеобразное кольцо
0Chdword
10hdwordколичество ключей, использующих этот блок
14hdwordразмер данных в блоке
18hданные - SecurityDescriptor, ACL, ACE ...

Блок индекса по потомкам
00hdwordразмер блока
04hword666Ch ( lf ) или 686Ch ( lh ) - сигнатура
06hwordколичество записей в блоке
08h
N записей следующей структуры
00hdwordадрес ключа
04hdwordхеш имени ключа

Блок индекса по потомкам с большим количеством элементов
00hdwordразмер блока
04hword696Ch ( li ) - сигнатура
06hwordколичество записей в блоке
08hN адресов ключей (dword)

Корневой блок индекса по потомкам с большим количеством элементов
00hdwordразмер блока
04hword6972h ( ri ) - сигнатура
06hwordколичество записей в блоке
08hN адресов индексов типа li, lh и lf (dword)

Корневой блок индеса по фрагментам значения параметра
00hdwordразмер блока
04hword6264h ( db ) - сигнатура
06hwordколичество записей в индексе по фрагментам значения параметра
08hdwordадрес индекса по фрагментам значения параметра

Нетипизированные блоки

Блок имени класса и
блок значения параметра
00hdwordразмер блока
04hимя класса / значение параметра

Блок индекса по параметрам и
блок индеса по фрагментам значения параметра
00hdwordразмер блока
04hN адресов параметров / значений (dword)

Paul Lee
2004.01.14 00:59