(Окончание, начало в №4)
Роль реестра в жизни операционной
системы
Реестр, главным образом, служит для хранения информации о конфигурации приложений, аппаратуры драйверов устройств, протоколов и сетевых адаптеров. Ядро ОС при старте извлекает из него сведения о загружаемых драйверах и порядке их запуска. Программы установки (Setup) добавляют новые сведения, кроме этого, они извлекают информацию для обнаружения уже установленных компонентов. Сама операционная система конфигурируется при непосредственном участии реестра. Когда компьютер завершает работу, содержимое реестра сохраняется на жестком диске. При включении питания ОС читает сохраненную в нем информацию о конфигурации, это позволяет восстанавливать предыдущее состояние. Также в реестре хранятся все пользовательские настройки, звуковые схемы, ярлыки на рабочем столе и т.д.
ОС гарантирует целостность реестра. Любое изменение, вносимое в него, будет либо выполнено, либо нет. Предположим, какая-либо программа модифицирует ветвь или ключевое значение реестра, и в это время происходит отключение питания. Изменения либо произойдут, либо нет, исключается комбинация из старых и новых значений. Это достигается за счет ведения журнала транзакций. Примерная схема выглядит так: 1. Изменяемые данные записываются в файл журнала (для NT с расширением *.log). 2. Первый сектор файла с реестром помечается, что указывает на переходное состояние. 3. Измененные данные записываются в файл реестра. 4. Снимается метка о переходном состоянии. Если сбой происходит на 1-ом этапе, реестр не модифицируется, если на 2-4-ом, он восстанавливается из журнального файла.
Корневые ключи WinNT
HKEY - это средства доступа к остальному дереву реестра, они являются уникальными идентификаторами, так называемыми описателями (handles), которыми можно воспользоваться в программе для доступа к нужным ключам.
HKEY_LOCAL_MACHINE хранит информацию о конфигурации компьютера, использующуюся приложениями, драйверами устройств и самой WinNT. В него входят следующие пять ключей:
- HARDWARE. Содержит данные об аппаратной части ПК, значения этого ключа вычисляются при запуске системы и "теряются" при ее остановке. Например, если пройтись по ветви \DESCRIPTION\System\CentralProcessor\0, можно увидеть основные характеристики центрального процессора. Несложно догадаться, что параметр ~MHz - это тактовая частота, а Identifier="x86 Family 6 Model 3 Stepping 4" - идентификационная информация о процессоре, обнаруженная NTDETECT.COM и NTOSKRNL. EXE при старте системы. Нумерация физических устройств начинается с нуля. Данные из этого раздела удобней читать с помощью утилиты диагностики winmsd.exe.
- SAM (Security Account Manager). Информация о пользовательских и групповых бюджетах. Для просмотра и изменения значений можно воспользоваться "Диспетчером пользователей". Исполняемый файл musrmgr.exe очень, на мой взгляд, оригинальное название.
- SECURITY. Здесь находится информация о системе безопасности ПК, пользовательские права, политика в отношении паролей, членство в локальных группах.
- SOFTWARE - конфигурационные данные пользовательских приложений, установленных на компьютере. В подключе Classes находятся ассоциации приложений с типами файлов. Для примера возьмем .bmp (точечный рисунок). Значение ключа \Classes\.bmp по умолчанию равно "Paint.Picture", т.е. с этим расширением ассоциирован ключ реестра "Paint.Picture". В нем указана строка запуска для всех файлов с расширением *.bmp, "D:\\WINNT\\system32\\mspaint. exe\"\"%1". Вместо "%1" система подставит путь и имя файла и запустит редактор "Paint". Проверить это несложно, достаточно в "Проводнике" дважды кликнуть на любом *.bmp файле. Проинсталлируем теперь графический вьювер стороннего производителя, например, "ACDSee32". Вновь посмотрим на ключ \Classes\.bmp, его значение изменилось на ACDC_BMP, программа при инсталляции изменила ассоциацию *.bmp, взяв ее на себя. Теперь если вновь кликнуть на *.bmp, ОС прочитает ассоциацию в \Classes\.bmp, перейдет на ключ ACDC_BMP, прочитает строку запуска программы и как параметр передаст ей имя bmp-файла.
- SYSTEM. Организован в виде набора управляющих опций ControlSets, каждая из которых содержит параметры для управления устройствами и сервисами. Множественные наборы "ControlSets001...00N" - это своего рода резервные копии конфигурации системы, они необходимы для запуска ОС в любом случае. NT поддерживает так называемую Last Known Good конфигурацию. Эти спецификации лежат в подключе \Select. Названия ключей говорят сами за себя: Current - номер текущей загруженной конфигурации, Failed - конфигурация, которая была замещена набором Last Known Good при последнем запуске системы. Именно здесь можно попытаться найти ошибку, если система при каких-либо изменениях не стартовала и пришлось откатиться на Last Known Good (нажать клавишу пробел при загрузке). Значения этих ключей - цифры. Они ссылаются на ключ \CurrentControlSet\IDConfigDB, где в ключе "Hardware Profiles" перечислены эти конфигурации. Проследим, как меняется этот ключ. В "Панели управления" (Control Panel) выберем пиктограмму "Система" (System) и создадим новый профиль оборудования (кнопка "копировать"), назвав его "New". В "\IDConfigDB\Hardware Profiles\" появился новый подключ, в моем случае "002". Зайдя в "\Hardware Profiles\002", можно увидеть его имя FriendlyName=New. Кроме "Hardware Profiles", в подключе Control имеется еще несколько интересных мест. Hivelist - это местоположение файлов, содержащих информацию реестра. Windows - пути к корневому и системным каталогам ОС. Enum - этот ключ задел на будущее. В Win95 он отвечает за конфигурацию устройств Plug and Play (PnP). NT в "естественном" виде не поддерживает этот стандарт, но в будущих версиях, как было заявлено, ситуация изменится. Ключ Services - список драйверов, файловых систем, сервисных программ. Данные этого ключа определяют загружаемые сервисы и порядок их запуска. К таким сервисам относится и поддержка CD-ROM, мне не удалось найти у него отключение функции autorun через "Панель управления", а здесь она достаточно хорошо видна \Services\Cdrom\Autorun (1-autorun включен).
- HKEY_CLASSES_ROOT ссылается на данные HKEY_LOCAL_MACHINE\SOFTWARE\Classes. Введение этого ключа необходимо для совместимости с Win3.1 и поддержки OLE (Object Linking and Embedding - один из способов обмена и разделения информации между программами).
- HKEY_CURRENT_CONFIG. Он ссылается на "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Hardware Profiles\Current" и содержит информацию о текущей конфигурации системы.
- HKEY_CURRENT_USER. База данных, описывающая настройки ОС текущего зарегистрированного пользователя. Настройки "Рабочего стола" ("\.DEFAULT \Control Panel"), переменных среды (Environment), раскладка клавиатуры (Keyboard Layout) и т.д.
- HKEY_USERS. Содержит все пользовательские профили.
Отличия в Win95
Реестр Win95 достаточно сильно отличается от аналогичного в WinNT. Особенно это хорошо видно при разработке программ, если для получения конфигурационных данных обращаться прямо к реестру, в обход специализированных функций. Очень часто в NT этот ключ есть, а в Win95 - нет. Непонятна такая рассогласованность между группами разработчиков этих ОС.
- Hkey_Dyn_Data. Указывает на ветвь Hkey_Local_Machine, содержащую динамические данные. Часть данных необходимо хранить в оперативной памяти для более быстрого доступа к ним. Подраздел "Configuration Manager" - это дерево устройств, представляющее собой запись о текущей конфигурации системы в оперативной памяти. Они создаются при каждом запуске системы и обновляются при изменении конфигурации.
- Hkey_Local_Machine. Его основное назначение аналогично одноименному ключу в WinNT. В \Config определяются аппаратные конфигурации под именами 001, 002 и т.д. Имена, определяемые пользователем для этих конфигураций, помещаются в System\CurrentControlSet\Control\IDConfigDB.System\CurrentControlSet\Control\PerStats - отображает статистику, возвращаемую утилитой "System Monitor". Ключ PWDProvider указывает местоположение файлов паролей и пользовательских бюджетов.
- HKEY_USERS. Содержит все пользовательские профили, которые регистрируются на ПК. Подключ .DEFAULT используется для создания профиля пользователя, впервые регистрирующегося на компьютере. Точка (.) в имени этого ключа указывает на то, что его значение является значением по умолчанию. Что интересно, если ее удалить, то имя Default будет восприниматься системой как любое пользовательское имя. \.Default включает в себя следующие подключи: AppEvents - различные пути к звуковым файлам, ассоциированными с событиями в Windows. "Keyboard layouts" - информация о текущей конфигурации клавиатуры. RunMRU, StreamMRU - список недавно запускавшихся приложений и документов соответственно.
Ограничения на доступ и
безопасность реестра
Защитить файлы реестра, если система установлена на NTFS, как и любые другие, можно через "Проводник->контекстное меню->свойства->безопасность". Но часто такая глобальная мера неэффективна: на ПК работают несколько пользователей, и приложениям, которые они запускают, необходимо читать/писать в реестр. Для раздачи персональных прав на отдельные ветви можно воспользоваться regedt32. Необходимо стать на нужную ветвь и выбрать из меню пункт Безопасность->Разрешения, здесь же можно установить аудит. Для поддержки реестра в "наилучшем состоянии" существует достаточно много программ, одна из них - REGCLEAN (support.microsoft.com).
За более подробной информацией можно обратится к "Windows NT Workstation Resource Kit" или воспользоваться набором articles в support.microsoft.com.
Андрей ЛАПОУХОВ,
Andrew@belsoft.vitebsk.by