На смену ini-файлам, имеющим ряд концептуальных ограничений, еще в Windows 3.1
было введено понятие реестра — регистрационной базы данных, хранящей различные
настройки ОС и приложений. Изначально реестр был предназначен только для
хранения сведений об объектах OLE (Object Linking and Embedding — связь и
внедрение объектов) и сопоставлений приложений расширениям имен файлов, однако
позже его структура и границы использования расширились. Реестры разных версий
Windows имеют различия; это нужно помнить при импорте reg-файлов. В Windows 2000
и XP в архитектуру реестра были введены важные новшества, улучшающие
функциональность данного компонента ОС. Реестр хранится в бинарном (двоичном)
виде, поэтому для ручной работы с ним необходима специальная программа —
редактор реестра. В XP это Regedit.exe, в других версиях NT ими являются
Regedit.exe и Regedt32.exe, имеющий дополнительные возможности работы с реестром
(Regedt32.exe есть и в XP, но на самом деле он всего лишь вызывает Regedit.exe).
Есть и другие программы, в том числе и консольные (Reg.exe). Ручным
модифицированием параметров реестра мы займемся чуть позже, а сейчас рассмотрим
основные группы сведений, хранящихся в этой базе данных.
- Программы установки. Любая грамотно написанная программа
под Windows должна иметь свой инсталлятор-установщик. Это может быть встроенный
в ОС Microsoft Installer либо любой другой. В любом случае инсталлятор использует
реестр для хранения своих настроек, позволяя правильно устанавливать и удалять
приложения, не трогая совместно используемые файлы.
- Распознаватель. При каждом запуске компьютера программа
NTDETECT.COM и ядро Windows распознает оборудование и сохраняет эту информацию
в реестре.
- Ядро ОС. Хранит много сведений в реестре о своей конфигурации,
в том числе и данные о порядке загрузки драйверов устройств.
- Диспетчер PnP (Plug and Play). Абсолютно необходимая вещь
для большинства пользователей, которая избавляет их от мук по установке
нового оборудования (не всегда, правда:)). Неудивительно, что он хранит
свою информацию в реестре.
- Драйверы устройств. Хранят здесь свои параметры.
- Административные средства. Например, такие, как Панель
управления, MMC (Micro-soft Management Console) и др.
- Пользовательские профили. Это целая группа параметров,
уникальная для каждого пользователя: настройки графической оболочки, сетевых
соединений, программ и многое другое.
- Аппаратные профили. Позволяют создавать несколько конфигураций
с различным оборудованием.
- Общие настройки программ. Почему общие? Потому, что у
каждого пользователя есть профиль, где хранятся его настройки для соответствующей
программы.
Вот мы и разобрались с предназначением реестра. Теперь обратим свое внимание на логическую структуру реестра. Для лучшего понимания материала рекомендуется запустить Regedit.exe, только ничего пока не трогайте:).
Структура реестра
Первая аналогия, которая приходит в голову при взгляде на реестр в Regedit.exe,
— как похоже на файловую систему! И точно, налицо древовидная структура. Папкам
здесь соответствуют ключи (keys) или разделы (ветви), а файлам — параметры
(values). Разделы могут содержать как вложенные разделы (sub keys), так и
параметры. На верхнем уровне этой иерархии находятся корневые разделы (root
keys). Они перечислены в таблице 1
Таблица 1. Корневые разделы
Тип данных |
Описание |
REG_BINARY |
Двоичные данные. Большинство сведений об аппаратных компонентах
хранится в виде двоичных данных и выводится в редакторе реестра
в шестнадцатеричном формате |
REG_DWORD |
Данные, представленные целым числом (4 байта). Многие параметры
служб и драйверов устройств имеют этот тип и отображаются в двоичном,
шестнадцатеричном или десятичном форматах |
REG_EXPAND_SZ |
Строка Unicode переменной длины. Этот тип данных включает переменные,
обрабатываемые программой или службой |
REG_MULTI_SZ |
Многострочный текст Unicode. Этот тип, как правило, имеют списки
и другие записи в формате, удобном для чтения. Записи разделяются
пробелами, запятыми или другими символами |
REG_SZ |
Текстовая Unicode строка фиксированной длины |
REG_DWORD_LITTLE_ENDIAN |
32-разрядное число в формате “остроконечников” — младший байт
хранится первым в памяти. Эквивалент REG_DWORD |
REG_DWORD_BIG_ENDIAN |
32-разрядное число в формате “тупоконечников” — старший байт
хранится первым в памяти |
REG_LINK |
Символическая ссылка Unicode. Только для внутреннего использования
(некоторые корневые разделы являются такой ссылкой на другие подразделы) |
REG_NONE |
Параметр не имеет определенного типа данных |
REG_QWORD |
64-разрядное число |
REG_QWORD_LITTLE_ENDIAN |
64-разрядное число в формате “остроконечников”. Эквивалент REG_QWORD |
REG_RESOURCE_LIST |
Список аппаратных ресурсов. Используется только в разделе HKLM\HARDWARE |
REG_FULL_RESOURCE_DESCRIPTOR |
Дескриптор (описатель) аппаратного ресурса. Применяется только
в HKLM\HARDWARE. |
REG_RESOURCE_REQUIREMENTS_LIST |
Список необходимых аппаратных ресурсов. Используется только
в HKLM\HARDWARE. |
Типы данных
Все параметры реестра имеют фиксированный тип. В таблице 2 я приводится полный
список используемых типов. Не все из них используются в разных версиях NT —
REG_QWORD явно предназначен для 64-битной версии XP. Следует учесть, что ряд
типов используется только системой в некоторых разделах, и создать свой параметр
такого типа с помощью редактора реестра не получится.
Таблица 2. Типы параметров
Тип данных
|
Описание
|
REG_BINARY
|
Двоичные данные. Большинство сведений об аппаратных
компонентах хранится в виде двоичных данных и выводится в редакторе
реестра в шестнадцатеричном формате
|
REG_DWORD
|
Данные, представленные целым числом (4 байта). Многие
параметры служб и драйверов устройств имеют этот тип и отображаются
в двоичном, шестнадцатеричном или десятичном форматах
|
REG_EXPAND_SZ
|
Строка Unicode переменной длины. Этот тип данных
включает переменные, обрабатываемые программой или службой
|
REG_MULTI_SZ
|
Многострочный текст Unicode. Этот тип, как правило,
имеют списки и другие записи в формате, удобном для чтения. Записи
разделяются пробелами, запятыми или другими символами
|
REG_SZ
|
Текстовая Unicode строка фиксированной длины
|
REG_DWORD_LITTLE_ENDIAN
|
32-разрядное число в формате “остроконечников” —
младший байт хранится первым в памяти. Эквивалент REG_DWORD
|
REG_DWORD_BIG_ENDIAN
|
32-разрядное число в формате “тупоконечников” —
старший байт хранится первым в памяти
|
REG_LINK
|
Символическая ссылка Unicode. Только для внутреннего
использования (некоторые корневые разделы являются такой ссылкой
на другие подразделы)
|
REG_NONE
|
Параметр не имеет определенного типа данных
|
REG_QWORD
|
64-разрядное число
|
REG_QWORD_LITTLE_ENDIAN
|
64-разрядное число в формате “остроконечников”.
Эквивалент REG_QWORD
|
REG_RESOURCE_LIST
|
Список аппаратных ресурсов. Используется только
в разделе HKLM\HARDWARE
|
REG_FULL_RESOURCE_DESCRIPTOR
|
Дескриптор (описатель) аппаратного ресурса. Применяется
только в HKLM\HARDWARE.
|
REG_RESOURCE_REQUIREMENTS_LIST
|
Список необходимых аппаратных ресурсов. Используется
только в HKLM\HARDWARE.
|
Хранение реестра
Элементы реестра хранятся в виде атомарной структуры. Реестр разделяется на
составные части, называемые ульями (hives), или кустами. Ульи хранятся на диске
в виде файлов. Некоторые ульи, такие, как HKLM\HARDWARE, не сохраняются в
файлах, а создаются при каждой загрузке, то есть являются изменяемыми (vola-tile).
При запуске системы реестр собирается из ульев в единую древовидную структуру с
корневыми разделами. Перечислим ульи реестра и их местоположение на диске (для
NT старше версии 4.0) в таблице 3
Таблица 3. Ульи реестра
Улей
|
Расположение
|
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 (отсутствует в XP).
- LOG — журнал транзакций, в котором регистрируются все изменения реестра.
- SAV — копии ульев в том виде, в котором они были после завершения текстовой
фазы установки.
Дополнительные сведения
Реестр является настоящей базой данных, поэтому в нем используется технология
восстановления, похожая на оную в NTFS. Уже упомянутые LOG-файлы содержат журнал
транзакций, который хранит все изменения. Благодаря этому реализуется
атомарность реестра — то есть в данный момент времени в реестре могут быть либо
старые значения, либо новые, даже после сбоя. Как видим, в отличие от NTFS,
здесь обеспечивается сохранность не только структуры реестра, но и данных. К
тому же, реестр поддерживает такие фишки NTFS, как управление избирательным
доступом и аудит событий — система безопасности пронизывает всю NT снизу
доверху. Да, эти функции доступны только из Regedt32.exe или Regedit.exe для XP.
А еще весь реестр или его отдельные части можно экспортировать в текстовые
reg-файлы (Unicode для Windows 2000 и старше), редактировать их в блокноте, а
затем экспортировать обратно. Во многих редакторах реестра можно подключать
любые доступные ульи реестра, в том числе и на удаленных машинах (при
соответствующих полномочиях). Есть возможность делать резервные копии с помощью
программы NTBackup. И многое другое. Ну, а на сегодня наш маленький ликбез
окончен
Источник:
http://www.nestor.minsk.by/kg/
|