NT club. Часть 9. Реестр
Автор: Creator
— Ну и зараза же ты, родной.
— Он хуже. Он просто кю.
(с) "Кин-Дза-Дза"
Опровержение
Дальнейший текст содержит опровержение эпиграфа по отношению к реестру:). Я
понимаю, что многие пользователи знакомы с понятием реестра, тем не менее,
сейчас мы поговорим именно о нем. Хотелось бы разложить по полочкам основные
сведения о реестре. Интересующимся могу посоветовать ряд книг Ольги Кокоревой
о реестре различных Windows, ну, а для изучения внутренней структуры оного
(ау, программисты!) просьба прочитать соответствующий раздел не раз мною
упомянутой книги Д. Соломона и М. Руссиновича "Внутреннее устройство Microsoft
Windows 2000". Ну что ж, начнем!
Who is who?
На смену 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/
|