Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МетУказКурсРабСистемПрогрЗИЭИТ2005.doc
Скачиваний:
9
Добавлен:
13.09.2019
Размер:
698 Кб
Скачать
☆

Тема 11. Утилита, сохраняющая в файле информацию из системного реестра о программах, установленных на компьтере.

Техническое задание.

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

Методические указания.

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

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

Точками входа в реестр служат несколько стандартных разделов.

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

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

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

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

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

Записи реестра, называемые параметрами, могут содержать данные различных типов. Среди них чаще всего используются данные, записанные в формате DWORD и строки.

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

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

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

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

Параметры.

hKey идентифицирует дескриптор открытого в данный момент раздела или одного из стандартных зарезервированных разделов; phkResult указывает на переменную типа HKEY, которая принимает дескриптор вновь открытого раздела.

lpSubKey – имя подраздела. Оно может содержать путь. Значение NULL вызывает открытие нового раздела – дубликата hKey. Значение ulOptions должно быть равно нулю.

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

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

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

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

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

LONG RegEnumKeyEx ( HKEY hKey, DWORD dwIndex, LPTSTR lpMame, LPDWORD lpcbName, LPDWORD lpReserved, LPTSTR lpClass, LPDWORD lpcbClass, PFILETIME lpftLastWriteTime).

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

Можно также создавать новые разделы. Для этого предназначена функция RegCreateKeyEx. Для удаления раздела служит функция 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_EXPEND_SZ (расширяемую строку с параметрами, заменяемыми переменными окружения). Список всех типов можно получить во встроенной справке.

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

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

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

LONG RegSetValueEx ( HKEY hKey, LPCTSTR lpValueName, DWORD Reserved, DWORD dwType, CONST BYTE * lpData, CONST cbData ).

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