Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпора 97.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
778.75 Кб
Скачать

11.2 Реестр

Реестр — это централизованная иерархическая база данных конфигурации приложений и системы. Доступ к реестру осуществляется через разделы реестра, которые аналогичны каталогам файловой системы. Раздел может содержать другие разделы или пары "параметр-значение", которые можно уподобить именам файлов и их со­держимому.

Пользователь или администратор могут просматривать и редактировать содержи­мое реестра с помощью редактора реестра, который вызывается командой REGEDIT32. Кроме того, программы могут управлять реестром через функции API, описанные в этом разделе.

Пары "параметр-значение" в реестре содержат, в частности, следующую информацию:

  • номер версии и номер выпуска операционной системы, а также имя зарегистрирован-ного пользователя;

  • информацию подобного рода обо всех правильно установленных приложениях;

  • информацию о типе процессора компьютера, количестве процессоров, систем­ ной памяти и т.д.;

  • пользовательскую информацию, такую как основной каталог и настройки при­ложений;

  • данные безопасности, например имена учетных записей пользователей;

  • установленные службы;

  • соответствия между расширениями файлов и выполняемыми программами, которые применяются оболочкой интерфейса пользователя, когда он щелкает на значке файла; например, расширение .doc может соответствовать Microsoft Word;

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

Разделы реестра

Можно заметить аналогию между каталогами файловой системы и раз­делами реестра. Каждый раздел может содержать другие разделы, а также последова­тельность пар "параметр-значение". Подобно тому как к файловой системе можно обращаться с помощью полных имен файлов, к реестру можно обращаться по именам разделов. Точками входа в реестр служат несколько стандартных разделов.

1. HKEY_LOCAL_MACHINE хранит физическую информацию о машине, а также данные об установленном программном обеспечении. Для каждой установлен­ной программы создаются подразделы вида

SOFTWARE\Название_компании\Название_продукта\Версия.

  1. HKEY_USERS содержит данные конфигурации пользователей.

  2. HKEY_CURRENT_CONFIG содержит текущие параметры настройки, такие как раз­ решающая способность монитора и шрифты.

  3. HKEY_CLASSES_ROOT содержит подразделы, определяющие соответствие между расширениями файлов и классами и приложениями, используемыми оболочкой для доступа к объектам с этими расширениями. В этом разделе также записаны все данные, необходимые для объектной модели компонентов Microsoft (COM).

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

Управление реестром

Функции управления реестром могут получать и устанавливать значения парамет­ров, а также создавать новые подразделы и пары "параметр—значение". Для указания существующих разделов и получения новых применяются дескрипторы разделов типа HKEY. Значения имеют определенный тип; существует несколько возможных типов, например строки, двойные слова (DWORD) и расширяемые строки, параметры кото­рых могут заменяться переменными окружения.

Управление разделами

Функция RegOpenKeyEx открывает подраздел. Начиная с одного из стандартных зарезервированных разделов, можно обойти весь реестр и получить дескриптор лю­бого нужного подраздела.

LONG RegOpenKeyEx { HKEY hKey, LPCTSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)

Параметры

hKey идентифицирует дескриптор открытого в данный момент раздела или одного из стандартных зарезервированных разделов;

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

lpSubKey — имя подраздела. Оно может содержать путь, например Microsoft\WindowsNT\CurrentVersion. Значение NULL вызывает открытие нового раздела-дубликата hKey. Значение ulOptions должно быть равно нулю.

samDesired — маска доступа, описывающая атрибуты безопасности нового разде­ла. Возможные значения — KEY_ALL_ACCESS, KEY_WRITE, KEY_QUERY_VALUE и

KEY_ENUMERATE_SUBKEYS.

Возвращаемое значение — это обычно ERROR_SUCCESS. Любое другое значение указывает на ошибку. Для закрытия открытого раздела служит функция RegCloseKey, в единственном параметре которой указывается дескриптор раздела.

Чтобы получить имена подразделов, следует указать дескриптор раздела в функции RegEnumKeyEx.

Существуют также функции, предназначенные для получения пар "параметр-значение": RegEnumValue и RegQueryValueEx. Функция RegSetValueEx записыва­ет типизированные данные в поле значения открытого раздела.

RegEnumKeyEx выводит подразделы открытого раздела реестра подобно тому, как FirstFile и FindNextFile выводят содержимое каталога. Эта функция выдает имя раздела, строку класса и время последнего изменения.

LONG RegEnumKeyEx ( HKEY hKey, DWORD dwIndex,

LPTSTR lpMame, LPDWORD lpcbName, LPDWORD lpReserved,

LPTSTR lpClass, LPDWORD lpcbClass,

PFILETIME lpftLastWriteTime)

Параметр dwIndex при первом вызове должен быть равен нулю, а при каждом последующем — увеличиваться на единицу. Имя раздела и его размер, а также строка класса и ее размер возвращаются обычным способом. Функция возвращает ERROR_SUCCESS или значение ошибки.

Можно также создавать новые разделы. Для этого предназначена функция RegCreateKeyEx. Разделам можно присваивать атрибуты безопасности таким же образом, как каталогам и файлам.

LONG RegCreateKeyEx ( HKEY hKey, LPCTSTR lpSubKey,

DWORD Reserved, LPTSTR lpClass, DWORD dwOptions,

REGSAM samDesired, LPSECURITY_ATTRIBUTES lpSecurityAttributes,

PHKEY phkResult, LPDWORD lpdwDisposition)

Параметры

lpSubKey — имя нового подраздела в открытом разделе, обозначенном дескрипто­ром hKey.

lpClass — класс или тип объекта раздела, описывающий данные, которые он представляет. Возможные значения включают, в частности, REG_SZ (строку с завершающим нулем) и REG_DWORD (двойное слово).

dwOptions — либо нуль, либо одно из взаимно исключающих значений:

REG_OPTION_VOLATILE или REG_OPTION_NON_VOLATILE. Постоянная (non-volatile) информация реестра хранится в файле и восстанавливается при перезапуске системы. Непостоянные разделы хранятся в памяти и не восстанавливаются.

samDesired — то же значение, что и в RegOpenKeyEx.

lpSecurityAttributes может иметь значение NULL или указывать на атрибуты безопасности. Возможные права доступа выбираются из значений, указанных для samDesired.

lpdwDisposition указывает на значение DWORD, которое отмечает, существовал ли раздел раньше (REG_OPENED_EXISTING_KEY) или он создан вновь (REG_CREATED_NEW_KEY).

Для удаления раздела служит функция RegDeleteKey. Два ее параметра — деск­риптор открытого раздела и имя подраздела.

Управление параметрами

Вывести параметры указанного открытого раздела можно с помощью функции RegEnumValue. Следует указать индекс параметра: при первом вызове — нуль, при последующих — с увеличением на единицу. Функция выдает строку с именем пара­метра и его длиной. Также возвращается значение параметра и его тип.

LONG RegEnumValue ( HKEY hKey, DWORD dwIndex,

LPTSTR lpValueName, LPDWORD lpcbValueName,

LPDWORD lpReserved, LPDWORD lpType,

LPBYTE lpData, LPDWORD lpcbData)

Текущее значение параметра возвращается в буфере, на который указывает lpData. Размер результата можно получить в lpcbData.

Тип данных, на который указывает lpType, может иметь множество значений, включая REG_BINARY, REG_DWORD, REG_SZ (строку) и REG_EXPAND_SZ (расширяемую строку с параметрами, заменяемыми переменными окружения). Список всех типов можно получить во встроенной справке.

Возвращаемое значение функции позволяет узнать, выведены ли все параметры. Значение равно ERROR_SUCCESS, если найден правильный параметр.

Функция RegQueryValueEx подобна приведенной выше за исключением того, что в ней указывается имя параметра, а не индекс. Эту функцию можно использовать, ес­ли известны имена параметров, в противном случае раздел следует просматривать с помощью RegEnumValueEx.

Чтобы установить значение параметра в открытом разделе, применяется функция RegSetValueEx. В ней указываются имя параметра, тип значения и само значение.

LONG RegSetValueEx ( HKEY hKey, LPCTSTR lpValueName,

DWORD Reserved, DWORD dwType, CONST BYTE *lpData, CONST cbData)

Наконец, для удаления параметров служит функция RegDeleteValue.

Лекция 12. Тема: Использование ввода-вывода

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]