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 |
Список аппаратных ресурсов. Используется только в разделе hklmhardware |
reg_full_resource_de
scriptor |
Дескриптор (описатель) аппаратного ресурса. Применяется только в hklmhardware. |
reg_resource_requirements_list |
Список необходимых аппаратных ресурсов. Используется только в hklmhardware. |
Типы данных
Все параметры реестра имеют фиксированный тип. В таблице 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 |
Список аппаратных ресурсов. Используется только в разделе hklmhardware |
reg_full_resource_de
scriptor |
Дескриптор (описатель) аппаратного ресурса. Применяется только в hklmhardware. |
reg_resource_requirements_list |
Список необходимых аппаратных ресурсов. Используется только в hklmhardware. |
Хранение реестра
Элементы реестра хранятся в виде атомарной структуры. Реестр
разделяется на составные части, называемые ульями (hives), или кустами.
Ульи хранятся на диске в виде файлов. Некоторые ульи, такие, как
hklmhardware, не сохраняются в файлах, а создаются при каждой загрузке,
то есть являются изменяемыми (vola-tile). При запуске системы реестр
собирается из ульев в единую древовидную структуру с корневыми
разделами. Перечислим ульи реестра и их местоположение на диске (для nt
старше версии 4.0) в таблице 3.
Таблица 3. Ульи реестра
Улей |
Расположение |
hklmsystem |
%systemroot%system32configsystem |
hklmsam |
%systemroot%system32configsam |
hklmsecurity |
%systemroot%system32configsecurity |
hklmsoftware |
%systemroot%system32configsoftware |
hklmhardware |
Изменяемый улей |
hklmsystemclone |
Изменяемый улей |
hku
|
%userprofile%tuser.dat |
hku
_classes |
%userprofile%local settingsapplication datamicrosoftwindowsusrclass.dat |
hku.default |
%systemroot%system32configdefault |
Кроме этих файлов, есть ряд вспомогательных, со следующими расширениями:
• alt — резервная копия улья hklmsystem (отсутствует в xp).
• log — журнал транзакций, в котором регистрируются все изменения реестра.
• sav — копии ульев в том виде, в котором они были после завершения текстовой фазы установки.
Дополнительные сведения
Реестр является настоящей базой данных, поэтому в нем используется
технология восстановления, похожая на оную в ntfs. Уже упомянутые
log-файлы содержат журнал транзакций, который хранит все изменения.
Благодаря этому реализуется атомарность реестра — то есть в данный
момент времени в реестре могут быть либо старые значения, либо новые,
даже после сбоя. Как видим, в отличие от ntfs, здесь обеспечивается
сохранность не только структуры реестра, но и данных. К тому же, реестр
поддерживает такие фишки ntfs, как управление избирательным доступом и
аудит событий — система безопасности пронизывает всю nt снизу доверху.
Да, эти функции доступны только из regedt32.exe или regedit.exe для xp.
А еще весь реестр или его отдельные части можно экспортировать в
текстовые reg-файлы (unicode для windows 2000 и старше), редактировать
их в блокноте, а затем экспортировать обратно. Во многих редакторах
реестра можно подключать любые доступные ульи реестра, в том числе и на
удаленных машинах (при соответствующих полномочиях). Есть возможность
делать резервные копии с помощью программы ntbackup. И многое другое.
Ну, а на сегодня наш маленький ликбез окончен.
До новых встреч!
|