Краткие теоретические сведения. Реестр (Registry) – специальная системная база данных, в которой приложения и операционная система могут сохранять информацию о конфигурации.
Реестр (Registry) – специальная системная база данных, в которой приложения и операционная система могут сохранять информацию о конфигурации.
Системный реестр служит для осуществления ряда функций:
– хранение конфигураций оборудования и сведений об устройствах «Plug-and-Play»;
– хранение списка драйверов и их параметров;
– описания программных интерфейсов (например, интерфейсов COM-серверов);
– таблица ассоциаций файлов данных;
– хранение конфигурации и значений параметров программ;
– обслуживание различных административных программ, например, панели управления (Control Panel).
Реестр имеет иерархическую древовидную структуру. Узлы дерева называются ключами (key). Каждый ключ может содержать любое количество подключей (sub-key) и значений (values), причем и те, и другие организованы в виде неупорядоченных списков, элементам которых присвоены индексы, начиная с нуля. Различие между ключами и подключами в действительности условно, фактически все ключи являются подключами различного уровня нескольких предопределенных ключей. Значения ключей могут быть строковыми, двоичными и числовыми; также ключ может быть ссылкой на другой ключ. Каждый ключ идентифицируется его именем, уникальным относительно вышестоящего ключа; открытым ключам присваиваются описатели (handle) HKEY. Значения идентифицируются именами и индексами в списке.
Данные в системном реестре хранятся в двоичном виде. Для работы с ними приложения должны использовать специальные системные функции. Различают hive (букв. «улей») ключей, то есть их двоичный образ в структурах в памяти, называемых собственно реестром, и файлы данных реестра.
Для работы с ключом приложение должно открыть его. При открытии ключа необходимо указать открытый ранее ключ в качестве вышестоящего. Система всегда предоставляет четыре предопределенных (predefined) ключа верхнего уровня, которые считаются открытыми всегда и могут использоваться как точки входа в реестр: HKEY_LOCAL_MACHINE – описание известных на этот момент конфигураций компьютера; HKEY_CLASSES_ROOT – описание текущей конфигурации машины, ссылка на одну из конфигураций HKEY_LOCAL_MACHINE); HKEY_USERS – описание всех имеющихся пользователей; HKEY_CURRENT_USER – описание текущего пользователя, ссылка на одного из пользователей HKEY_USERS; HKEY_CURRENT_CONFIG – текущий подключ Config (ссылка) ключа HKEY_LOCAL_MACHINE;
Система предоставляет ряд функций для доступа к реестру. Перечислим некоторые из них:
– RegCreateKey(), RegCreateKeyEx() – создание нового или открытие существующего ключа в реестре; создаваемый или открываемый ключ обязательно должен быть подключом уже открытого ключа;
– RegOpenKey(), RegOpenKeyEx() – только открытие существующего ключа, в остальном аналогичны предыдущим;
– RegCloseKey() – закрытие открытого ключа;
– RegDeleteKey() – удаление ключа;
– RegFlushKey() – выгрузка содержимого ключа в соответствующий файл реестра;
– RegSaveKey(), RegLoadKey() – выгрузка содержимого ключа в отдельный файл и загрузка из него;
– RegEnumKey(), RegEnumKeyEx() – получение списка подключей;
– RegEnumValue() – получение списка значений;
– RegQueryValue(), RegQueryValueEx() – чтение значения по его имени;
– RegQueryMultipleValues() – чтение нескольких значений.
Ввиду относительной сложности и громоздкости обращений к реестру можно реализовать собственные «оберточные» функции для доступа по именам и «путям» реестре, аналогично работе с файловой системой.
На пользовательском уровне для работы с реестром служит утилита regedit, поддерживающая как интерактивный, так и командный (выполнение пакетных файлов) режимы.
Контрольные вопросы
1) Назначение реестра
2) Структура реестра
3) Поддерживаемые типы данных в реестре
4) API для работы с реестром
5) Порядок и правила работы с реестром.
Варианты заданий
14.3.1. Поиск в реестре значений, в том числе по шаблону (для текстовых), и вывод в удобной форме результатов поиска.
14.3.2. Поиск в реестре неиспользуемых и/или недействительных ключей и значений, например ссылающихся на несуществующие файлы и пути.
14.3.3. Получение и модификация отдельных элементов реестра (например, чтение текущей конфигурации, изменение отдельных настроек, чистка «историй» программ и т.п.)
Литература
1. Бек, Л. Введение в системное программирование / Л. Бек ; пер. с англ. – М.: Мир, 1988. – 448 с.
2. Вильямс, А. Системное программирование в Windows 2000 для профессионалов / А. Вильямс ; пер. с англ. – СПб.: Питер, 2001. – 624 с.
3. Гордеев, А.В. Системное программное обеспечение / А.В. Гордеев, А.Ю. Молчанов. – СПб. : Питер, 2001. – 736 с.
4. Гук, М. Аппаратные средства IBM PC / М. Гук. – СПб : Питер, 1996. – 224 с.
5. Гук, М. Аппаратные интерфейсы ПК. Энциклопедия / М. Гук. – СПб. : Питер, 2002. – 528 с.
6. Джордейн, Р. Справочник программиста персональных компьютеров типа IBM PC, XT и AT / Р. Джордейн ; пер. с англ. – М. : Финансы и статистика, 1992. – 544 с.
7. Зубков, С.В. Assembler для DOS, Windows и UNIX. / С.В. Зубков. – 3-е изд. – М. : ДМК пресс, СПб. : Питер, 2006. – 608 с.
8. Касаткин, А.И. Профессиональное программирование на языке Си. Управление ресурсами : справ. пособие / А.И. Касаткин.– Минск. : Вышэйшая школа, 1992. – 432 с.
9. Кулаков, В. Программирование дисковых подсистем / В. Кулаков. – СПб. : Питер, 2002. – 768 с.
10. Кулаков, В. Программирование на аппаратном уровне : спец. справочник / В. Кулаков. – 2-е изд. – СПб. : Питер, 2003. – 848 с.
11. Мешков, А.В., Тихомиров Ю.В. Visual C++ и MFC / А.В. Мешков, Ю.В. Тихомиров ; пер. с англ. – 2-е изд., перераб. и доп. – СПб. : БХВ-Петербург, 2002. – 1040 с.
12. Просиз, Дж. Управление памятью в DOS 5 / Дж. Просиз ; пер. с англ. – М. : Мир, 1994. – 240 с.
13. Рихтер Дж. Windows для профессионалов / Дж. Рихтер ; пер. с англ. – СПб.: Питер, 2000. – 752 с.
14. Скляров, В.А. Программное и лингвистическое обеспечение персональных ЭВМ. Системы общего назначения : справ. пособие / В.А. Скляров. – Минск: Вышэйшая школа, 1992. – 462 с.
15. Скляров, В.А. Программное и лингвистическое обеспечение персональных ЭВМ. Новые системы : справ. пособие / В.А. Скляров. – Минск: Вышэйшая школа, 1992. – 334 с.: ил.
16. Соломон, Д. Внутреннее устройство Microsoft Windows / Д. Соломон, М.Е. Руссинович ; пер. с англ. – 4-е изд. – СПб. : Питер, Русская Редакция, 2005. – 992 с.
17. Сорокина, С.И. Программирование драйверов и систем безопасности : учеб. пособие / С.И. Сорокина, А.Ю. Тихонов, А.Ю. Щербаков. – СПб. : БХВ-Петербург, М.: издатель Молчанов С.В. – 2002. – 256 с.
18. Таненбаум, Э. Современные операционные системы / Э. Таненбаум ; пер. с англ. – 2-е изд. – СПб. : Питер, 2002. – 1040 с.
19. Таненбаум Э., Вудхалл А. Операционные системы. Разработка и реализация / Э. Таненбаум, А. Вудхалл ; пер. с англ. – 3-е изд. – СПб. : Питер, 2007. – 704 с.
20. Юров, В.И. Assembler : учебник для вузов / В.И. Юров. – 2-е изд. – СПб. : Питер, 2007. – 640 с.
21. Assembler : практикум / В.И. Юров. – СПб.: Питер, 2002. – 400 с.