Книга: C# для профессионалов. Том II

Реестр

Реестр

Реестр имеет иерархическую структуру, очень похожую на файловую систему. Обычно просмотр или изменение содержимого реестра выполняется с помощью одной из двух утилит — regedit или regedt32. regedit стандартно поставляется со всеми версиями Windows, начиная с Windows 95. Утилита regedt32 поставляется с Windows NT и Windows 2000 — она менее дружественна пользователю, чем regedit, но разрешает доступ к данным безопасности, которые regedit не может видеть. Здесь будет использоваться regedit, которую можно запустить, вводя regedit в диалоговом окне Run… или командной строке.

При первом запуске regedit появится примерно следующее изображение:


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

В файловой системе узлами самого верхнего уровня можно считать разделы диска C:, D: и т.д. В реестре эквивалентом разделу является улей реестра. Невозможно изменить существующие ульи, они являются фиксированными, и всего существует семь ульев (хотя с помощью regedit можно увидеть только пять):

? HKEY_CLASSES_ROOT (HKCR) содержит данные о типах файлов в системе (.txt, .doc и т.д.) и приложениях, которые могут открывать файлы каждого типа. Включает также информацию о регистрации для всех компонентов COM (эта область является обычно наибольшей областью реестра, так как Windows сегодня поставляется с огромным числом компонентов COM).

? HKEY_CURRENT_USER (HKCU) содержит данные о предпочтениях пользователя, который в данный момент зарегистрирован на машине.

? HKEY_LOCAL_MACHINE (HKLM) является огромным ульем, который содержит данные обо всем программном обеспечении и оборудовании, установленном на машине. Он также содержит улей HKCR: HKCR в действительности не является независимым ульем со своими собственными правами, а является просто удобным отображением на ключ реестра HKLM/SOFTWARE/Classes.

? HKEY_USERS (HKUSR) содержит данные о пользовательских предпочтениях всех пользователей. Как можно догадаться, он содержит также улей HKCU, который является отображением на один из ключей в HKEY_USERS).

? HKEY_CURRENT_CONFIG (HKCF) содержит данные об оборудовании компьютера.

Оставшиеся два ключа содержат информацию, которая имеет временный характер и которая часто изменяется:

? HKEY_DYN_DATA является общим контейнером для любых изменчивых данных, которые необходимо хранить где-то в реестре.

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

Внутри ульев находится древовидная структура ключей реестра. Каждый ключ является во многом аналогом папки или файла в файловой системе. Однако существует одно очень важное различие: файловая система различает файлы (которые предназначены для хранения данных) и папки (которые предназначены прежде всего для хранения других файлов или папок), но в реестре существуют только ключи. Ключ может содержать как данные, так и другие ключи.

Если ключ содержит данные, то они будут представлены как последовательность значений (можно привести доводы, что эти значения и есть грубые эквиваленты файлов в файловой системе). Каждое значение будет иметь имя, тип данных и значение. Кроме того, ключ может иметь значение по умолчанию, не имеющее имени.

Эту структуру можно увидеть, используя regedit для проверки ключей реестра. На экране показано содержимое ключа HKCU/Control Panel/Appearance, в котором находятся данные выбранной цветовой схемы зарегистрированного в данный момент пользователя. regedit показывает, какой ключ проверяется, выводя его с изображением открытой папки в древовидном представлении:


Ключ HKCU/Control Panel/Appearance имеет три заданных именованных значения, хотя значение по умолчанию не содержит никаких данных. Столбец на экране, помеченный Type, указывает тип данных каждого значения. Записи в реестре можно форматировать как один из трех типов данных. Этими типами являются REG_SZ (что грубо соответствует экземпляру строки .NET — соответствие неточное, так как типы данных реестра не являются типами данных .NET), REG_DWORD (грубо соответствует uint), и REG_BINARY (массив байтов).

Приложение, которое хочет сохранить данные в реестре, будет делать это создавая ряд ключей реестра, обычно с ключом HKLM/Software/<ИмяКомпании>. Отметим, что эти ключи не обязательно должны содержать какие-либо данные. Иногда сам факт существования ключа предоставляет достаточно информации для приложения.

Оглавление книги


Генерация: 0.418. Запросов К БД/Cache: 0 / 0
поделиться
Вверх Вниз