NT club. Часть 9. Реестр
NT club. Часть 9. Реестр
— Ну и зараза же ты, родной.
— Он хуже. Он просто кю.
(с) "Кин-Дза-Дза"
Опровержение
Дальнейший текст содержит опровержение эпиграфа по отношению к реестру:). Я понимаю, что многие пользователи знакомы с понятием реестра, тем не менее, сейчас мы поговорим именно о нем. Хотелось бы разложить по полочкам основные сведения о реестре. Интересующимся могу посоветовать ряд книг Ольги Кокоревой о реестре различных 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. Корневые разделы
Типы данных
Все параметры реестра имеют фиксированный тип. В таблице 2 я приведу полный список используемых типов. Не все из них используются в разных версиях NT — REG_QWORD явно предназначен для 64-битной версии XP. Следует учесть, что ряд типов используется только системой в некоторых разделах, и создать свой параметр такого типа с помощью редактора реестра не получится.
Таблица 2. Типы параметров
Хранение реестра
Элементы реестра хранятся в виде атомарной структуры. Реестр разделяется на составные части, называемые ульями (hives), или кустами. Ульи хранятся на диске в виде файлов. Некоторые ульи, такие, как HKLM\HARDWARE, не сохраняются в файлах, а создаются при каждой загрузке, то есть являются изменяемыми (vola-tile). При запуске системы реестр собирается из ульев в единую древовидную структуру с корневыми разделами. Перечислим ульи реестра и их местоположение на диске (для NT старше версии 4.0) в таблице 3.
Таблица 3. Ульи реестра
Кроме этих файлов, есть ряд вспомогательных, со следующими расширениями:
• ALT — резервная копия улья HKLM\SYSTEM (отсутствует в XP).
• LOG — журнал транзакций, в котором регистрируются все изменения реестра.
• SAV — копии ульев в том виде, в котором они были после завершения текстовой фазы установки.
Дополнительные сведения
Реестр является настоящей базой данных, поэтому в нем используется технология восстановления, похожая на оную в NTFS. Уже упомянутые LOG-файлы содержат журнал транзакций, который хранит все изменения. Благодаря этому реализуется атомарность реестра — то есть в данный момент времени в реестре могут быть либо старые значения, либо новые, даже после сбоя. Как видим, в отличие от NTFS, здесь обеспечивается сохранность не только структуры реестра, но и данных. К тому же, реестр поддерживает такие фишки NTFS, как управление избирательным доступом и аудит событий — система безопасности пронизывает всю NT снизу доверху. Да, эти функции доступны только из Regedt32.exe или Regedit.exe для XP. А еще весь реестр или его отдельные части можно экспортировать в текстовые reg-файлы (Unicode для Windows 2000 и старше), редактировать их в блокноте, а затем экспортировать обратно. Во многих редакторах реестра можно подключать любые доступные ульи реестра, в том числе и на удаленных машинах (при соответствующих полномочиях). Есть возможность делать резервные копии с помощью программы NTBackup. И многое другое. Ну, а на сегодня наш маленький ликбез окончен.
До новых встреч!
Creator, creator_vom@tut.by
— Ну и зараза же ты, родной.
— Он хуже. Он просто кю.
(с) "Кин-Дза-Дза"
Опровержение
Дальнейший текст содержит опровержение эпиграфа по отношению к реестру:). Я понимаю, что многие пользователи знакомы с понятием реестра, тем не менее, сейчас мы поговорим именно о нем. Хотелось бы разложить по полочкам основные сведения о реестре. Интересующимся могу посоветовать ряд книг Ольги Кокоревой о реестре различных 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. Корневые разделы
Раздел | Описание |
HKEY_CURRENT_USER (HKCU) | Является корневым для настроек пользователя, вошедшего в систему в настоящий момент. Эти данные называются профилем пользователя. По сути дела, это ссылка на один из подразделов HKU с соответствующим SID — Security ID (идентификатор безопасности) |
HKEY_USERS (HKU) | Содержит все загруженные профили пользователей компьютера и профиль по умолчанию (DEFAULT) |
HKEY_LOCAL_MACHINE (HKLM) | Содержит настройки, относящиеся к данному компьютеру (для всех пользователей), в том числе и параметры устройств |
HKEY_CLASSES_ROOT (HKCR) | Является суммой HKLM\SOFTWARE\Classes и HKCU\Software\Classes, причем HKCU имеет преимущество перед HCLM. Хранящиеся здесь сведения обеспечивают ассоциации программ с расширениями файлов. Также здесь хранится регистрационная информация COM |
HKEY_CURRENT_CONFIG (HKCC) | Содержит сведения о текущем аппаратном профиле, используемом ОС при запуске системы. Это ссылка на HKLM\SYSTEM\CurrentControlSet\Hardware Profiles\Current |
HKEY_PERFOMANCE_DATA (HKPD) | Содержит счетчики производительности системы. Невиден из редакторов реестра |
Все параметры реестра имеют фиксированный тип. В таблице 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. И многое другое. Ну, а на сегодня наш маленький ликбез окончен.
До новых встреч!
Creator, creator_vom@tut.by
Компьютерная газета. Статья была опубликована в номере 17 за 2003 год в рубрике soft :: win