ГЛАВА 6. РЕЕСТР ОС WINDOWS




 

§ 6.1.Структураиособенностиреестра Windows

 

Реестр (registry) - понятие сравнительно новое. Приложения, работавшие в среде

Windows 3.x и DOS, обычно создавали файлы инициализации, в которые записывалась

информация о параметрах конфигурации, пользовательских настройках, флагах состоя-

ния и других характеристиках приложения. Так, файл Win.INI содержит данные о кон-

фигурации системы, файл Reg.DAT - о связях между приложениями и расширениями

документов, а также об OLE-объектах, файл System.INI - об аппаратной конфигурации.

В других INI-файлах хранятся сведения о параметрах отдельных приложений.

Все файлы инициализации записываются в ASCII-формате, и доступ к ним можно

осуществить с помощью любого текстового редактора. Конечно, разработчики операци-

онной системы и приложений вовсе не стремятся к тому, чтобы пользователи самостоя-

тельно "ковырялись" в файлах инициализации. В идеале, эти файлы должны изменяться

только приложениями. Следует отметить, что файлы инициализации часто портятся, мо-

гут быть случайно удалены. Порой самые невинные изменения одного из них приводят к

необратимым последствиям, нарушая работу всей системы. Короче говоря, файлы ини-

циализации - это вечная головная боль программистов.

С появлением Windows NT (версия 3.1) на смену множеству разрозненных файлов

инициализации, в том числе System.INI, Win.INI, Protocol.INI, Config.SYS и

Autoexec.BAT, пришел единый системный реестр, хотя даже сегодня некоторые прило-

жения все еще записывают свои параметры в INI-файлы [12]. При запуске приложения

многие из этих параметров записываются в реестр, т.е. хранятся в двух форматах. Сле-

довательно, при перезагрузке системы конфигурацию, которая была нарушена в резуль-

тате повреждения или ошибочного удаления INI-файла, можно восстановить.

Если говорить честно, системный реестр - это тоже головная боль программистов,

хотя и не такая сильная, как файлы инициализации. Разработчику приложений просто

необходимо знать, как используется реестр. В данной лекции рассмотрим методы созда-

ния разделов реестра, записи и чтения данных о конфигурации системы.

Реестр Windows представляет собой иерархическую структурированную базу дан-

ных, в которой содержится информация обо всех системных настройках, путях, пере-

менных, а также параметрах приложений, ранее располагавшаяся в разрозненных фай-

лах инициализации [12].

В Windows 9x физически реестр располагается в двух файлах в каталоге

\SystemRoot\ - System.dat и User.dat. Первый файл System.dat -содержит информацию,

общую для всех пользователей данного компьютера: параметры устройств, настройки

некоторых программ и др. Второй файл - User.dat - является специфичным для каждого

пользователя, сораняя его настройки. Оба файла имеют атрибут "Скрытый". Если на


компьютере


зарегистрировано


несколько


пользователей,


то


в


папке


\SystemRoot\Profiles\ хранятся в отдельных каталогах "личные" файлы каждого: содер-

жимое Рабочего стола, главное меню и др., а также часть User.dat системного реестра. В

папке \SystemRoot\ тоже хранится файл User.dat, содержащий настройки системы по

умолчанию (то есть те, которые будут загружены, если в ответ на запрос имени пользо-

вателя и пароля нажать клавишу Esc). При загрузке компьютера после ввода имени

пользователя файл User.dat из каталога этого пользователя вместе с System.dat и User.dat

из каталога Windows загружается в память и "склеивается" с ними в единое целое. В

Windows NT (в версиях до Windows NT 4) реестр располагается в папках

\SystemRoot\System32\config\ и в \UserProfile\ Ntuser.dat. Реестр Windows NT последних

поколений (старше версии 4.0) имеет более сложную конфигурацию, которая будет рас-

смотрена далее.

 

 



 

 

Формат базы данных имеет ряд преимуществ по сравнению с форматом простого

списка. Данные реестра защищены как от непреднамеренной порчи, так и от случайного

удаления. Кроме того, поскольку вся системная информация находится в одном месте,

вы можете легко и быстро получить доступ к интересующим вас данным, не занимаясь

утомительным поиском в нескольких разрозненных источниках [12]. В Windows каждый

раз после успешной загрузки компьютера автоматически создаются резервные копии

файлов System.DAT и User.DAT под именами System.DA0 и User.DA0. Эти файлы могут

использоваться для восстановления поврежденных файлов реестра. К сожалению,

Windows 98 не поддерживает эту операцию, однако средства восстановления реестра в

ней все-таки реализованы. В данном случае необходимо выполнить следующую после-

довательность действий [4]:

1. Запустить ПЭВМ в режиме Safe Mode Command Prompt Only;

2. После запуска ПЭВМ в режиме MS-DOS перейти в папку command Windows,

cd\Windows\command;

3. Набрать команду: scanreg/restore;

4. Выбрать предыдущую версию реестра, которую вы хотите восстановить;

5. Перезапустить ПЭВМ.

Напрямую данные системного реестра не доступны. Их нельзя просматривать и

редактировать так же просто, как записи в INI-файлах. Для работы с реестром предна-

значен редактор реестра - Registry Editor (утилита RegEdit.EXE или RegEd32.EXE).

Windows не инсталлирует утилиту RegEdit или RegEd32 в программную группу и

не создает для нее ярлык в стартовом меню для быстрого доступа. Но это не упущение

разработчиков Microsoft, а специальная мера защиты реестра от неквалифицированных

пользователей Некорректные операции с реестром могут необратимым образом повре-

дить всю систему.

Прежде чем изменять системную информацию, необходимо сделать резервную ко-

пию реестра. Для этой цели в меню Registry имеется команда Export Registry File, осу-

ществляющая резервное копирование всего реестра. Выберите удобное место и легко

распознаваемое имя для записи резервной копии реестра, например корневой каталог и

имя Registry. REG. He следует изменять расширение REG, иначе вы столкнетесь с труд-

ностями при восстановлении данных. Имейте в виду, что файл записывается в ASCII-

формате и будет занимать около 4-5 Мб.

Теперь, если изменение системной информации приведет к возникновению каких-

либо проблем, вы всегда сможете восстановить первоначальный реестр, либо импорти-

ровав резервную копию с помощью редактора реестра, либо просто выполнив двойной

щелчок на имени экспортированного файла. В случае серьезной ошибки поврежденные

файлы системного реестра (System.DAT и User.DAT) можно заменить их резервными

копиями, восстановив тем самым исходную конфигурацию.

Несмотря на необходимость соблюдать все меры предосторожности, иногда все-

таки возникает потребность в прямом доступе к системному реестру. Простой просмотр

сложной и многокомпонентной иерархической структуры может оказаться непростой и

довольно утомительной задачей. Единственным альтернативным методом поиска опре-

деленной записи (точное расположение которой не известно) является применение на-

ходящихся в меню Edit команд Find и Find Next с указанием искомой строки или како-

го-либо другого известного значения.

С точки зрения разработчика, более важно не уметь редактировать реестр, а знать,

каким образом он используется приложениями, т.е. как они записывают данные в реестр

и читают из него системную информацию. Для этого необходимо разобраться со струк-

турой реестра.

Реестр представляет собой иерархическую систему разделов и подразделов. На-

гляднее будет представить структуру реестра в виде дерева, разделы и подразделы кото-

 

 


 

рого аналогичны каталогам и подкаталогам файловой системы (именно таким образом

реестр представлен в окне Registry Editor). Раздел (key) любого уровня может содер-

жать один или несколько фрагментов информации (параметров), подобно тому как лю-

бой каталог может содержать один или несколько файлов; в разделе могут также содер-

жаться подразделы.

Основу структуры реестра Windows 9x и NT первых поколений составляют шесть

разделов верхнего уровня (табл. 6.1), предоставляющих доступ ко всем остальным под-

разделам.

Таблица 6.1


Раздел

HKEY_CLASSES_ROOT

 

 

HKEY_CURRENT_USER

 

HKEY_LOCAL_MACHINE

 

 

HKEY_USERS


Содержимое

Информация о зарегистрированных классах, расши-

рениях документов и т.д. На самом деле данный раз-

дел является ссылкой на подраздел

HKEY_LOCAL_MACHINE\SOFTWARE\Classes

Информация, о текущей пользовательской конфигу-

рации, внешнем виде рабочего стола, сетевых на-

стройках и т.д. Реально этот раздел представляет со-

бой ссылку на подраздел HKEY_USERS для текущего

пользователя

Информация о системной (аппаратной) конфигура-

ции, в том числе о глобальных настройках приложе-

ний, поддерживаемых устройствах, схемах подклю-

чения устройств и т.д.

Информация обо всех пользователях, зарегистриро-

ванных в локальной системе (см. раздел

HKEY_CURRENT_USER)


HKEY_CURRENT_CONFIG Ссылка на подраздел HKEY_LOCAL_MACHINE \

Config \ xxxxxx, где хххххх - это числовой параметр,

соответствующий текущей аппаратной конфигурации


HKEY_DYN_DATA


Динамические данные для устройств типа Plug-and-

Play и VdX-драйверов виртуальных устройств


 

Windows XP в отличие от своих предшественниц не имеет ограничения по размеру

реестра. Реестр Windows XP содержит пять основных разделов:

HKEY_CLASSES_ROOT - в этом разделе хранится информация о зарегистрированных

классах, расширениях документов.

HKEY_CURRENT_USER - хранится информация о текущей пользовательской конфи-

гурации, внешнем виде рабочего стола, сетевых настройках.

HKEY_LOCAL_MACHINE - хранится информация о системной и аппаратной конфи-

гурации.

HKEY_USERS - хранится информация обо всех зарегистрированных пользователях.

HKEY_CURRENT_CONFIG - текущая аппаратная конфигурация.

Элементы реестра Windows XP хранятся в виде атомарной структуры. Реестр раз-

деляется на составные части (ульи - hives) или кусты. Ульи хранятся на диске в виде

файлов. Некоторые ульи, такие, как HKLM\HARDWARE, не сохраняются в файлах, а

создаются при каждой загрузке, то есть являются изменяемыми (vola-tile). При запуске

системы реестр собирается из ульев в единую древовидную структуру с корневыми раз-

делами. В таблице 6.2 перечислены ульи реестра и их местоположение на диске (данные

справедливы для NT старше версии 4.0).

 

Таблица 6.2

 



 

HKLM\SYSTEM

HKLM\SAM


 

 

Улей


 

 

Расположение

SystemRoot\system32\config\system

SystemRoot\system3 2\config\SAM


HKLM\SECURITY

HKLM\SOFTWARE

HKLM\HARDWARE

HKLM\SYSTEM\Clone

HKU\<SID пользователя>

HKU\<SID пользователя> Classes

 

HKU\.DEFAULT


SystemRoot\system32\config\SECURITY

SystemRoot\system32\config\software

Изменяемый улей

Изменяемый улей

USERPROFILE\ntuser.dat

USERPROFILE\Local Settings\Application Data\

Microsoft\Windows\UsrClass.dat

SystemRoot\system32\config\default


Кроме данных файлов, имеется ряд вспомогательных, со следующими расшире-

ниями:

LOG - журнал транзакций, в котором регистрируются все изменения реестра.

SAV - копии ульев в том виде, в котором они были после завершения текстовой фазы

установки.

Реестр является настоящей базой данных, поэтому в нем используется технология

восстановления, похожая как в NTFS. Уже упомянутые LOG-файлы содержат журнал

транзакций, который хранит все изменения. Благодаря этому реализуется атомарность

реестра - то есть в данный момент времени в реестре могут быть либо старые значения,

либо новые, даже после сбоя. Как видим, в отличие от NTFS, здесь обеспечивается со-

хранность не только структуры реестра, но и данных. К тому же, реестр поддерживает

такие параметры NTFS, как управление избирательным доступом и аудит событий - сис-

тема безопасности пронизывает всю современную NT.

Внутри корневого раздела находятся разделы и подразделы, которые аналогичны

каталогам и подкаталогам жесткого диска. Раздел может содержать информацию или

данные. Раздел и подраздел могут содержать 0, 1 или несколько параметров, параметр

по умолчанию, а также 0 или несколько подразделов. Каждый параметр имеет имя, тип и

значение. Три части параметра реестра всегда располагаются в определенном порядке:

 

[RegistrySizeLimit] [REG_DWORD] [0х8000000]. Имя, Тип данных, значение.

 

Записи реестра, называемые параметрами, могут содержать данные различных

типов (табл. 6.3). Среди них чаще всего используются данные, записанные в двоичном,

десятичном или шестнадцатеричном и в текстовом форматах. Однако используемый тип

данных оказывает незначительное влияние на операции чтения и записи благодаря при-

менению API-функций RegQueryValueEx() и RegSetValueEx(), о которых мы поговорим

далее.

Таблица 6.3


Тип данных

REG_BINARY

 

 

REG_DWORD


Описание

Необработанные двоичные данные. Большинство сведений об

аппаратных компонентах хранится в виде двоичных данных и

выводится в редакторе реестра в шестнадцатеричном формате.

Данные, представленные целым числом. Многие параметры

служб и драйверов устройств имеют этот тип и отображаются

в двоичном, шестнадцатеричном или десятичном форматах.

Окончание табл. 6.3

 



 

 

REG_SZ


 

 


 

 

Текстовая строка в формате, удобном для восприятия челове-

ком. Значениям, представляющим собой описания компонен-

тов, обычно присваивается именно этот тип данных.


REG_EXPAND_SZ

 

 

REG_MULTI_SZ

 

 

REG_FULL_

RESOURCE_

DESCRIPTOR

REG_LINK


Расширяемая строка данных. Эта строка представляет собой

текст, содержащий переменную, которая может быть заменена

при вызове со стороны приложения.

Многострочное поле. Значения, которые фактически пред-

ставляют собой списки текстовых строк в формате, удобном

для восприятия человеком, обычно имеют именно этот тип

данных, строки разделены символом NULL.

Последовательность вложенных массивов, разработанная для

хранения списка ресурсов аппаратного компонента или драй-

вера.

Символьная ссылка в кодировке Unicode


REG_RESOURCE_LIST Список ресурсов драйверов устройств


REG_NONE


Тип значения не определен


 

§ 6.2. API-функциидляработысреестром Windows

 

Windows API содержит 26 функций, предназначенных для работы с реестром

(включая 5 функций, которые служат для совместимости с Windows 3.х). Из всех этих

функций в приложениях обычно используются не более трех-четырех. Все API-

функции, применяемые для выполнения операций с реестром, перечислены в табл. 6.4.

Таблица 6.4


Функция

RegCloseKey

 

 

RegConnectRegistry

 

 

RegCreateKey

 

RegCreateKeyEx

 

RegDeleteKey

 

 

RegDeleteValue

 

RegEnumKey*

 

RegEnumKeyEx

 

RegEnumValue

 

 


Выполняемое действие

Закрывает (освобождает) дескриптор указанного разде-

ла без обновления реестра; см. также функцию

RegFlushKey. (Для всех версий)

Устанавливает связь с заранее определенным дескрип-

тором реестра на другом (удаленном или сетевом) ком-

пьютере. Для выполнения операций с локальным реест-

ром не нужна. (Для всех версий)

Создает заданный раздел или, если таковой уже суще-

ствует, открывает его

Создает заданный раздел или, если таковой уже суще-

ствует, открывает его. (Для Windows 98/95/NT)

Удаляет заданный раздел и все его подразделы. (Для

Windows 98/95). Удаляет заданный раздел, но не удаля-

ет его подразделы. (Для Windows NT)

Удаляет значение именованного параметра из заданно-

го раздела реестра. (Для всех версий)

Составляет список подразделов заданного открытого

раздела.

Составляет список подразделов заданного открытого

раздела. (Для Windows 98/95/NT)

Составляет список параметров, которые содержатся в

заданном открытом разделе. (Для Windows 98/95/NT)

Окончание табл. 6.4

 



 

RegFlushKey

 

RegGetKeySecurity

 

RegLoadKey


 

 

Записывает все атрибуты заданного раздела в реестр.

(Для всех версий)

Возвращает дескриптор безопасности заданного откры-

того раздела. (Для Windows NT)

Создает подраздел раздела HKEY_USER или

HKEY_LOCAL_MACHINE, прежде чем копировать в

этот подраздел информацию из указанного файла. (Для

всех версий)


RegNotifyChangeKeyValue Извещает вызывающую функцию об изменении атри-

бутов или содержимого открытого раздела. Не извещает

об удалении раздела. (Для всех версий)


RegOpenKey*

RegOpenKeyEx

 

RegQuerylnfoKey**

 

 

RegQueryMultipleValues

 

RegQueryValue*

 

RegQueryValueEx**

 

RegReplaceKey

 

 

RegRestoreKey

 

RegSaveKey

 

RegSetKeySecurity

 

RegSetValue*

 

RegSetValueEx**

 

 

RegUnLoadKey


Открывает указанный раздел, но не создает его

Открывает указанный раздел, но не создает его. (Для

Windows 98/95/NT)

Читает информацию об открытом подразделе, в том

числе о его размере, номере, классе, атрибуте безопас-

ности и т.д. (Для Windows 98/95/NT)

Возвращает тип и данные для списка имен параметров,

связанных с открытым разделом. (Для всех версий)

Читает значение, связанное с безымянным параметром

указанного открытого раздела

Читает значение, связанное с безымянным параметром

указанного открытого раздела. (Для Windows 98/95/NT)

Заменяет файл, в котором хранятся копии разделов и

подразделов, новым файлом. При перезапуске системы

разделы и подразделы получат значения параметров,

заданные в новом файле. (Для Windows 98/95/NT)

Читает данные реестра из указанного файла, копируя их

в подразделы заданного раздела. (Для всех версий)

Сохраняет указанный раздел, подразделы и параметры в

файле. (Для всех версий)

Устанавливает атрибут безопасности открытого разде-

ла. (Для Windows NT)

Связывает безымянный параметр (текстовый) с опреде-

ленным разделом

Сохраняет данные в заданном параметре открытого

раздела и может присвоить разделу дополнительное

значение и информацию о типе. (Для Windows

98/95/NT)

Выгружает (удаляет) из реестра указанный раздел, все

его подразделы и параметры. (Для Windows 98/95/NT)


* Функция обеспечивает совместимость с Windows З.х.

** Функции, которые чаще всего используются приложениями.

 

API-функции RegSetKeySecurity(), RegGetKeySecurity(), а также параметры безо-

пасности некоторых других функций можно применять только в среде Windows NT.

Windows 9x не поддерживает защиты реестра, поэтому атрибуты безопасности просто

игнорируются или возвращаются в виде нулевых значений.

Рассмотрим определение некоторых основных функций работы с реестром. Функ-

ция RegQueryInfoKey() определена следующим образом:

 

 





Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-04-02 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: