Сборник статей по настройке Windows


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



Статья взята с сайта http://paullee.ru/articles, автор General Paul Lee Corruption.



Сегодня мы поговорим о том, что многие называют "помойной ямой" Windows, а именно о реестре. Многие уже научились работать с содержимым реестра: менять параметры системы, извлекать полезную информацию и т.д. - но не все знают, что же представляет из себя реестр Windows "изнутри".

В системе Win95/98 (о ней сегодня пойдет речь) реестр хранится в двух файлах SYSTEM.DAT и USER.DAT. Как их найти. В корневом каталоге загрузочного диска имеется файл установок командного процессора MSDOS.SYS, в разделе [Paths] которого следует отыскать переменную WinDir. Ее значение - каталог с установленной Win95/98, в нем и находятся интересующие нас файлы. Надо заметить, что они имеют атрибут Hidden (скрытый) и Read only (только для чтения).

Что же представляет из себя файл реестра? Это файл данных древовидной структуры, состоящий из трех основных частей: заголовка, индекса, и данных, которые могут располагаться в одном или нескольких блоках.

Заголовок - запись размером 20h (32) байта имеет следующий вид:

00h: 4 байта - "CREG" сигнатура заголовка реестра 08h: двойное слово - адрес первого блока данных 10h: слово - количество блоков данных

Индекс - список ссылок на элементы реестра (на его ветви), имеет свой подзаголовок размером в 10h байт:

00h: 4 байта - "RGKN" сигнатура индекса реестра 04h: двойное слово - размер индекса 08h: слово - относительное смещение адреса в файле (обычно равно 20h - размер заголовка реестра) 0Ch: двойное слово - количество записей в индексе

Далее идут записи индекса следующей структуры:

00h: двойное слово 04h: двойное слово - контрольная сумма ключа (сумма всех букв имени ключа в верхнем регистре) 08h: двойное слово 0Ch: двойное слово - указатель на предка 10h: двойное слово - указатель на потомка 14h: двойное слово - указатель на следующий ключ этого уровня 18h: слово - номер блока данных, в котором находится ключ 1Ah: слово - номер (не порядковый!) ключа в блоке данных




Начало  Назад  Вперед