Чтение онлайн

на главную

Жанры

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

Ватсон Карли

Шрифт:

□ 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/<ИмяКомпании>. Отметим, что эти ключи не обязательно должны содержать какие-либо данные. Иногда сам факт существования ключа предоставляет достаточно информации для приложения.

Классы реестра в .NET

Доступ к реестру осуществляется с помощью двух классов в пространстве имен

Microsoft.Win32
Registry
и
RegistryKey
. Экземпляр
RegistryKey
представляет ключ реестра. Этот класс реализует методы для доступа к ключам-потомкам, для создания новых ключей или для чтения или изменения значений ключа. Другими словами, чтобы делать все необходимое с ключом реестра (за исключением задания уровней безопасности для ключа).
RegistryKey
является классом, который будет использоваться практически для любой работы с реестром.
Registry
, напротив, является классом, экземпляры которого никогда не создаются. Его роль состоит в предоставлении экземпляров
RegistryKey
, которые являются ключами верхнего уровня, различными ульями, чтобы начать перемещение по реестру.
Registry
предоставляет эти экземпляры через семь статических свойств, называемых соответственно
ClassesRoot
,
CurrentConfig
,
CurrentUser
,
DynData
,
LocalMachine
,
PerformanceData
и
Users
.

Поэтому, например, чтобы получить экземпляр

RegistryKey
, который представляет ключ HKLM, необходимо написать:

RegistryKey Hklm = Registry.LocalMachine;

Процесс получения ссылки на объект

RegistryKey
называют открытием ключа.

Можно было бы ожидать, что методы объекта

RegistryKey
будут подобны методам класса
DirectoryInfo
при условии, что реестр имеет иерархическую структуру, аналогичную файловой системе, но в действительности это не так. Часто способ доступа к реестру отличается от способа, который используется для файлов и папок, и
RegistryKey
реализует методы, которые это отражают.

Наиболее очевидное различие состоит в том, как открывают ключ реестра в заданном месте в реестре. Класс

Registry
не имеет никаких открытых конструкторов, которые можно использовать, он не имеет также никаких методов, которые позволят перейти прямо к ключу, задавая его имя. Вместо этого ожидается, что вы спуститесь вниз к этому ключу с вершины соответствующего улья. Если желательно создать экземпляр объекта
RegistryKey
, то единственный способ — начать с соответствующего статического свойства
Registry
и двигаться оттуда вниз. Поэтому, например, если нужно прочитать некоторые данные в ключе
HKLM/Software/Microsoft
, то ссылку на него можно получить следующим образом:

RegistryKey Hklm = Registry.LocalMachine;

RegistryKey HkSoftware = Hklm.OpenSubKey("Software");

RegistryKey HkMicrosoft = HkSoftware.OpenSubKey("Microsoft");

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

OpenSubKey
, которая получает второй параметр типа
bool
, указывающий, требуется ли иметь доступ к ключу для чтения-записи. Поэтому, например, при желании модифицировать ключ
Microsoft
(предполагая, что вы являетесь системным администратором с полномочиями на это), необходимо написать следующее:

RegistryKey Hklm = Registry.LocalMachine;

RegistryKey HkSoftware = Hklm.OpenSubKey("Software");

RegistryKey HkMicrosoft = HkSoftware.OpenSubKey("Microsoft", true);

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

Метод

OpenSubKey
будет вызываться, если ожидается, что ключ уже присутствует. Если ключ отсутствует, то он возвращает ссылку null. Если желательно создать ключ, то необходимо использовать метод
CreateSubKey
(который автоматически предоставляет доступ к ключу для чтения-записи через возвращаемую ссылку):

RegistryKey Hklm = Registry.LocalMachine;

RegistryKey HkSoftware = Hklm.OpenSubKey("Software");

RegistryKey HkMine = HkSoftware.CreateSubKey("MyOwnSoftware");

Способ работы

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

Поделиться:
Популярные книги

Ваше Сиятельство

Моури Эрли
1. Ваше Сиятельство
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Ваше Сиятельство

Неудержимый. Книга XIV

Боярский Андрей
14. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XIV

Идеальный мир для Лекаря

Сапфир Олег
1. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря

Подаренная чёрному дракону

Лунёва Мария
Любовные романы:
любовно-фантастические романы
7.07
рейтинг книги
Подаренная чёрному дракону

Я Гордый часть 2

Машуков Тимур
2. Стальные яйца
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я Гордый часть 2

Бальмануг. Невеста

Лашина Полина
5. Мир Десяти
Фантастика:
юмористическое фэнтези
5.00
рейтинг книги
Бальмануг. Невеста

Пограничная река. (Тетралогия)

Каменистый Артем
Пограничная река
Фантастика:
фэнтези
боевая фантастика
9.13
рейтинг книги
Пограничная река. (Тетралогия)

Сонный лекарь 6

Голд Джон
6. Сонный лекарь
Фантастика:
альтернативная история
аниме
5.00
рейтинг книги
Сонный лекарь 6

Тринадцатый

NikL
1. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
6.80
рейтинг книги
Тринадцатый

Ночь со зверем

Владимирова Анна
3. Оборотни-медведи
Любовные романы:
любовно-фантастические романы
5.25
рейтинг книги
Ночь со зверем

Страж. Тетралогия

Пехов Алексей Юрьевич
Страж
Фантастика:
фэнтези
9.11
рейтинг книги
Страж. Тетралогия

Кодекс Охотника. Книга XIV

Винокуров Юрий
14. Кодекс Охотника
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XIV

Не грози Дубровскому! Том VIII

Панарин Антон
8. РОС: Не грози Дубровскому!
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Не грози Дубровскому! Том VIII

Барон устанавливает правила

Ренгач Евгений
6. Закон сильного
Старинная литература:
прочая старинная литература
5.00
рейтинг книги
Барон устанавливает правила