На смену 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
Кроме этих файлов, есть ряд вспомогательных, со следующими расширениями:
ALT — резервная копия улья HKLM\SYSTEM (отсутствует в XP).
LOG — журнал транзакций, в котором регистрируются все изменения реестра.
SAV — копии ульев в том виде, в котором они были после завершения текстовой
фазы установки.
Дополнительные сведения
Реестр является настоящей базой данных, поэтому в нем используется технология
восстановления, похожая на оную в NTFS. Уже упомянутые LOG-файлы содержат журнал
транзакций, который хранит все изменения. Благодаря этому реализуется
атомарность реестра — то есть в данный момент времени в реестре могут быть либо
старые значения, либо новые, даже после сбоя. Как видим, в отличие от NTFS,
здесь обеспечивается сохранность не только структуры реестра, но и данных. К
тому же, реестр поддерживает такие фишки NTFS, как управление избирательным
доступом и аудит событий — система безопасности пронизывает всю NT снизу
доверху. Да, эти функции доступны только из Regedt32.exe или Regedit.exe для XP.
А еще весь реестр или его отдельные части можно экспортировать в текстовые
reg-файлы (Unicode для Windows 2000 и старше), редактировать их в блокноте, а
затем экспортировать обратно. Во многих редакторах реестра можно подключать
любые доступные ульи реестра, в том числе и на удаленных машинах (при
соответствующих полномочиях). Есть возможность делать резервные копии с помощью
программы NTBackup. И многое другое. Ну, а на сегодня наш маленький ликбез
окончен