Архитектура системного реестра Windows

АРХИТЕКТУРА СИСТЕМНОГО РЕЕСТРА WINDOWS

1.ТИПЫ ДАННЫХ

Конечным элементом дерева реестра являются ключи или параметры.

Все параметры реестра имеют фиксированный тип. В табл.1 приведен полный список используемых типов. Не все из них используются в разных версиях Windows. Например, REG_QWORD явно предназначен для 64-битной версии XP. Кроме того, сохраняется преемственность поколений Windows – в более поздних версиях используются все типы ранних версий. Также следует учесть, что ряд типов используется только системой в некоторых разделах, и создать свой параметр такого типа с помощью редактора реестра не получится.

Таблица 1

Типы параметров

№ п/пТип данныхОписание
Windows 9x
REG_BINARYДвоичные данные. Большинство сведений об аппаратных компонентах хранится в виде двоичных данных и выводится в редакторе реестра в шестнадцатеричном формате. Максимальная длина такого ключа 16Кб.
REG_DWORDДанные, представленные целым числом (4 байта). Многие параметры служб и драйверов устройств имеют этот тип и отображаются в двоичном, шестнадцатеричном или десятичном форматах
REG_SZТекстовая строка фиксированной длины (например, “C:\Windows”)
Windows XP
REG_EXPAND_SZСтрока Unicode переменной длины. Этот тип данных включает переменные, обрабатываемые программой или службой
REG_MULTI_SZМногострочный текст Unicode. Этот тип, как правило, имеют списки и другие записи в формате, удобном для чтения. Записи разделяются пробелами, запятыми или другими символами
REG_DWORD_LITTLE_ENDIAN32-разрядное число в формате “остроконечников” – младший байт хранится первым в памяти. Эквивалент REG_DWORD
REG_DWORD_BIG_ENDIAN32-разрядное число в формате “тупоконечников” – старший байт хранится первым в памяти
REG_LINKСимволическая ссылка Unicode. Только для внутреннего использования (некоторые корневые разделы являются такой ссылкой на другие подразделы)
REG_NONEПараметр не имеет определенного типа данных
Windows XP (только в разделе HKLM\HARDWARE)
REG_RESOURCE_LISTСписок аппаратных ресурсов.
REG_FULL_RESOURCE_DESCRIPTORДескриптор (описатель) аппаратного ресурса.
REG_RESOURCE_REQUIREMENTS_LISTСписок необходимых аппаратных ресурсов.
Windows Vista
REG_QWORD64-разрядное число
REG_QWORD_LITTLE_ENDIAN64-разрядное число в формате “остроконечников”. Эквивалент REG_QWORD

Ограничения на имена ключей.

Имена ключей не могут содержать:

Обратные слеши (\),

Пробелы ( ),

Звездочки ( * )

Вопросительные знаки (?).

Имя ключа не должно совпадать с именами ключей, располагающихся выше него по иерархии.

Имеется три типа системных элементов реестра, каждый из которых является корневым и имеет собственную иерархию:

TypeLib,

Interface,

CLSID.

1. Иерархия TypeLib идентифицирует положение инсталлированных в данный момент библиотек типов, которые являются базами данных, описывающими содержимое компонентов OLE. Широко используемая для поддержки автоматизации библиотека типов описывает прототипы функций для всех поддерживаемых интерфейсов, а также включает в себя ссылки на файлы-подсказки, и поэтому инструменты разработки могут вызвать соответствующую страницу подсказки и помочь создателям макрокоманд правильно воспользоваться серверами автоматизации.

2. Иерархия Interface содержит список, отсортированный по идентификаторам интерфейса, всех инсталлированных в системе интерфейсов. Это дает возможность прочитать имя интерфейса (IUnknown, IMalloc и т. д.) и подробности о каждом интерфейсе (количество функций в каждом интерфейсе и его базовый класс).

3. Иерархия CLSID детализирует все инсталлированные в данный момент (открытые) компоненты OLE. CLSID – это идентификатор класса. CLSID обеспечивает связь между компонентами. Соединение с конкретным интерфейсом конкретного компонента требует сначала идентифицировать CLSID для доступа к компоненту, а затем IID для получения желаемого интерфейса. Так же, как и идентификаторы интерфейсов (типы данных IID и REFIID), идентификаторы классов (типы данных CLSID и REFCLSID) являются 128-разрядными (16 шестнадцатеричных цифр) числами, обеспечивающими машинный способ точной идентификации класса компонента. Также, как тип IID, CLSID имеет тип GUID:

Typedef struct_GUID

{ DWORD Data1;

WORD Data2 ;

WORD Data3;

BYTE Data4[8];

}GUID;

Из этих трех типов элементов самым важным является элемент идентификатор класса, поскольку детали модуля компонента (файл с расширением. DLL или. EXE) хранятся в иерархии CLSID.

Например, следующий элемент реестра делает доступным компонент библиотеки PUBMEM:

HKEY_CLASSES_ROOT\CLSID\

{308D0430 – 1090 – 11cf – B92A – 00AA006238F8}\

InprocServer32 = C:\PETZOLD\CHAP20\PUBMEM. DLL

InprocServer32 означает, что файл, на который ссылаются, является 32-разрядным файлом с расширением. DLL.

2. ХРАНЕНИЕ РЕЕСТРА

Ранее была рассмотрена логическая структура реестра, но существует еще и физическая структура, сохраняющая различные части реестра в отдельных файлах. Хранение реестров разных версий Windows имеют различия.

В Windows ХР реестр содержится в двух файлах SYSTEM. DAT и USER. DAT, находящиеся в каталоге Windows. В Windows Me был добавлен еще один файл CLASSES. DAT.

В Windows XP элементы реестра хранятся в виде атомарной структуры. Реестр разделяется на составные части, называемые ульями (hives), или кустами. Ульи хранятся на диске в виде файлов (табл.2). Некоторые ульи, такие, как HKLM\HARDWARE, не сохраняются в файлах, а создаются при каждой загрузке, то есть являются изменяемыми (vola-tile). При запуске системы реестр собирается из ульев в единую древовидную структуру с корневыми разделами.

Таблица 2

Ульи реестра

УлейРасположение
HKLM\SYSTEM%SystemRoot%\system32\config\system
HKLM\SAM%SystemRoot%\system32\config\SAM
HKLM\SECURITY%SystemRoot%\system32\config\SECURITY
HKLM\SOFTWARE%SystemRoot%\system32\config\software
HKLM\HARDWAREИзменяемый улей
HKLM\SYSTEM\CloneИзменяемый улей
HKU\<SID_пользователя>%USERPROFILE%\ntuser. dat
HKU\<SID_пользователя>_Classes%USERPROFILE%\Local Settings\Application Data\Microsoft\Windows\UsrClass. dat
HKU\.DEFAULT%SystemRoot%\system32\config\default

Кроме этих файлов, есть ряд вспомогательных, со следующими расширениями:

ALT – резервная копия улья HKLM\SYSTEM для Windows 2000 (отсутствует в XP).

LOG – журнал транзакций, в котором регистрируются все изменения реестра.

SAV – копии ульев в том виде, в котором они были после завершения текстовой фазы установки.

Пользователи Windows 98 могут провести параллель между файлами с расширением. sav и файлом System.1st.

На рис.1 показаны взаимосвязи между кустами реестра и соответствующими им файлами. На рисунке показан каталог %SYSTEMROOT%\System32\Config, в котором содержатся файлы кустов с настройками для компьютера. Из рис.1 видно, что Windows сохраняет содержание подраздела HKLM\SOFTWARE в файле куста, который называется Software.

Рис.1. Взаимосвязи между кустами реестра и соответствующими им файлами

3. ФАЙЛ РЕЕСТРА

Знание реестра Windows будет не полным без умения написать reg-файл. Начнем с того, что это такое. Reg-файл – это файл, имеющий определенную структуру и содержащий информацию, которая может быть импортирована в реестр. Если была заблокирована работа с редактором реестра, то наиболее легким способом подредактировать реестр будет создание и импортирование reg-файла.

К reg-файлам предъявляются определенные требования по структуре. Начнем с того, что в первой строке файла обязательно должно быть введено (для Windows ХР) REGEDIT4 или (для Windows 2000/XP) Windows Registry Editor Version 5.00.

Обратите внимание на то, что буквы должны быть большие. Кроме этого в первой строке ничего быть не должно. После этого текста ОБЯЗАТЕЛЬНО должна быть пустая строка.

Затем, указывается раздел реестра, в котором надо прописать или изменить какие-то параметры. Название раздела должно быть заключено в квадратные скобки […]. Ниже прописываются параметры, которые надо добавить, по одному параметру в строке. Если надо провести изменения в нескольких разделах, то должны оставлять одну пустую строку между последним параметром предыдущего раздела и названием следующего раздела. Может немного запутанно, но вот как это должно выглядеть:

REGEDIT4

[Razdel1]

“param1″=”znachenie1”

“param2″=”znachenei2”

“param3″=”znachenie3”

[Razdel2]

“param_1″=”znachenie_1”

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

Windows 2000/XP обладает обратной совместимостью и может обрабатывать файлы, созданные в Windows 9x. Но если вы экспортировали файл в Windows XP и перенесли его на Windows 9x, то вручную измените первую строчку на REGEDIT4

Теперь пару слов о параметрах, которые можно добавлять. Как вы, наверное, обратили внимание, в приведенном выше примере добавляются параметры с помощью строк типа “param1″=”znachenie1”. Т. е. таким образом добавляется СТРОКОВЫЙ параметр с именем “param1” и значением “znachenie1”. Но ведь существуют еще и параметры двоичные и DWORD. Формат записи для их добавления несколько другой. Для параметров типа DWORD используется строка

“param”=dword:XXXXXXXX

Здесь “param” – имя параметра, dword – указывает на тип этого параметра (буквы должны быть обязательно маленькие!) и после двоеточия следует значение из восьми цифр в шестнадцатеричном (!) формате. Однако большинство параметров DWORD имеют значение либо 0, либо 1, значит, вы должны написать соответственно либо 00000000, либо 00000001 вместо значков ХХХХХХХХ. Пробелы в строке не допускаются.

Для добавления двоичного параметра формат записи несколько иной:

“param”=hex:XX, XX, XX,….

Теперь расшифруем эту строку. С названием параметра все ясно, после знака “=” идет hex, т. е. указывается, что это будет двоичный параметр, затем идут шестнадцатеричные числа, отделенные запятой. Например, если надо добавить двоичный параметр равный “be 00 00 00”, то пишется строка

“param”=hex:be,00,00,00

В реестре существуют параметры “По умолчанию” (“Default”). Чтобы присвоить им какое-то значение через reg-файл, надо добавить такую строку:

@=”znachenie”

Здесь значок @ показывает, что у нас присваивается значение параметра “По умолчанию”. Обратите внимание на то, что он не заключается в кавычки.

Теперь приведу пример простенького reg-файла, который прописывает в реестр сайт, устанавливающий домашнюю страничку в Internet Explorer’e:

REGEDIT4

[HKEY_CURRENT_USER\Software\ Microsoft\Internet Explorer\Main]

“Start Page” = “http://winchanger. narod. ru/”

Удаление параметров

С помощью reg-файлов можно не только устанавливать новые параметры, но и удалять их. Например, для удаления раздела из реестра надо перед его именем в квадратных скобках поставить символ “-“. Вот как это выглядит:

[-HKEY_LOCAL_MACHINE\Software\QuickSoft\QuickStart]

Благодаря этой записи, подраздел “QuickStart” из раздела “QuickSoft” будет удален со всем содержимым.

Для удаления отдельных параметров используйте следующий синтаксис:

REGEDIT4

[HKEY_CURRENT_USER\Software]

“xxx”= –

Параметры командной строки

Редактор реестра можно запускать с некоторыми ключами

/s (импортирует значения из reg-файла без вывода диалогового окна)

/e (экспортирует параметры в reg-файл. Пример: regedit /e myfile. reg HKEY_USERS\.DEFAULT


Архитектура системного реестра Windows