структура и API функции реестра windows
Особенности и структура реестра Windows
Реестр — системный журнал, в который программы записывают свои системные данные. Однако есть еще программы, которые записывают по старинке, в INI-файлы. Реестр Windows являет собой иерархическую базу данных, где лежат данные системных настроек, путей, переменных а также данные программ. В современных WIndows реестр лежит в двух файлах в каталоге SysteMRoot — User.dat и System.dat. Второй файл содержит данные обо всех пользователях ПК, первый — те данные, которые были реализованы конкретным пользователем.
Операционная система не инсталлирует утилиту RegEdit и не создает ярлыки для быстрого доступа. Это не ошибка разработчиков, а одна из мер защиты реестра от неопытных пользователей. Операции над реестром могут быть необратимыми, и повредить всю систему.
Также неопытным пользователям прежде чем изменять любые данные в реестре, есть рекомендация: сделать резервную копию реестра. Для этого в меню реестра есть команда Export Registry File, которая делает резервную копию всего реестра.
С точки зрения разработчика, не нужно знать редактирования реестра, нужно знать как он используется приложениями которые записывают и читают данные из него. Реестр имеет иерархическую структуру. В окне же это показано как каталоги и подкаталоги. Первые ответвления показаны в таблице 1.
Таблица 1
Раздел | Содержимое |
---|---|
HKEY_CLASSES_ROOT | Содержит данные о зарегистрированных классах и расширениях документов. Этот раздел является ссылкой на подраздел — HKEY_LOCAL_MACHINESOFTWAREClasses |
HKEY_CURRENT_USER | Данные о настройках текущего пользователя (сетевые настройки, рабочий стол и тд) Данные раздел является ссылкой на подраздел HKEY_USERS для конкретного пользователя |
HKEY_LOCAL_MACHINE | Данные о аппаратных настроек, схемы подключения аппаратных элементов, глобальные настройки приложений |
HKEY_USERS | Данные о всех пользователях, которые зарегистрированы в данной локальной системе |
HKEY_CURRENT_CONFIG | Ссылка на подраздел — HKEY_LOCAL_MACHINEConfigxxxx, где хххх — числовая характеристика конкретной аппаратной конфигурации |
HKEY_DYN_DATA | Динамические данные для устройств Plug-and-Play и драйверов виртуальных устройств |
Также в реестре присутствуют различные типы данных. Такими данными можно пользоваться с помощью API-функций (RegQueryValueEx() и др.). В табл.2 показаны эти типы.
Таблица 2
Тип данных | Описание |
---|---|
REG_BINARY | Необработанные двоичные данные. Множество данных об аппаратных элементах хранится в двоичном виде и выводится в окне реестра в шестнадцатеричном формате |
REG_DWORD | Данные которые записаны целым числом. Многие параметры драйверов и служб устройств работают с этим типом |
REG_SZ | Текстовая строка в формате, это удобно для чтения данных человеком. Этот тип предназначен обычно для описания |
REG_EXPAND_SZ | Расширяемая строка информации. Это строка содержит текст переменной, которая может редактироваться приложением |
REG_MULTI_SZ | Многострочное поле, параметры которого являются элементом списка. Строки разделены символом NULL |
REG_FULL_RESOURCE_DESCRIPTOR | Список который служит для хранения данных о аппаратных компонентов и драйвера |
REG_LINK | Ссылка символьная в кодировке Unicode |
REG_RESOURCE_LIST | Список ресурсов драйверов устройств |
REG_NONE | Тип значения не определен |
API-функции для работы с реестром Windows
В Windows реализовано 26 API-функций для работы с реестром. Они показаны в табл.3.
Таблица 3
Функция | Действие |
---|---|
RegCloseKey | Закрывает дескриптор указанного раздела без обновления реестра |
RegConnectRegistry | Реализует связь с дескриптором реестра на другом компьютере. На локальном компьютере не актуально |
RegCreateKey | Создает заданный раздел, если таков существует, то открывает его |
RegCreateKeyEx | Создает заданный раздел, если таков существует, то открывает его — Для Windows 98-95-NT |
RegDeleteKey | Удаляет заданный раздел и его подразделы (Win 98-95), Для Win NT не удаляет подразделы. |
RegDeleteValue | Удаляет значение параметра из заданного раздела |
RegEnumKey* | Показывает список подразделов текущего раздела |
ReEnumKeyEx | Показывает список подразделов текущего раздела — Для Win 98-95-NT |
RegEnumValue | Показывает список параметров в текущем разделе |
RegFlushKey | Записывает все атрибуты заданного раздела в реестр |
RegGetKeySecurity | Возвращает дескриптор безопасности текущего раздела |
RegNotifyChangeKeyValue | Оповещает данную функцию об изменении параметров или содержимого раздела, не оповещает об удалении раздела |
RegOpenKey* | Открывает указанный раздел, но не создает его |
RegOpenKeyEx | Открывает указанный раздел, но не создает его (Win 98-95-NT) |
RegQueryInfoKey** | Считывает данные об открытом подразделе — размер, номер, класс атрибут безопасности и др. |
RegQueryMultipleValues | Возвращает данные и тип для списка имен параметров |
RegQueryValue* | Считывает параметр который связан с безымянным параметром указанного раздела |
RegQueryValueEx | Считывает параметр который связан с безымянным параметром указанного раздела (Для Windows 98-95-NT) |
RegReplaceKey | Меняет файл, где хранятся копии разделов и подразделов. Обновления можно увидеть после перезагрузки компьютера |
RegRestoreKey | Читает данные реестра из определенного файла, и копирует их в подразделы данного раздела |
RegSaveKey | Сохраняет данный раздел и подразделы в определенный файл |
RegSetKeySecurity | Ставит атрибут безопасности открытого раздела |
RegSetValue* | Связывает безымянный атрибут с определенным разделом |
RegSetValueEx** | Сохраняет данные в определенном атрибуте раздела |
RegUnLoadKey | Выгружает из реестра указанный раздел, его подразделы и параметры (удаляет) |