Краткие теоретические сведения. Реестр (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 Win­dows / Д. Соломон, М.Е. Руссинович ; пер. с англ. – 4-е изд. – СПб. : Питер, Русская Редакция, 2005. – 992 с.

17. Сорокина, С.И. Программирование драйверов и систем безопас­ности : учеб. пособие / С.И. Сорокина, А.Ю. Тихонов, А.Ю. Щерба­ков. – СПб. : БХВ-Петербург, М.: издатель Молчанов С.В. – 2002. – 256 с.

18. Таненбаум, Э. Современные операционные системы / Э. Таненбаум ; пер. с англ. – 2-е изд. – СПб. : Питер, 2002. – 1040 с.

19. Таненбаум Э., Вудхалл А. Операционные системы. Разработка и реализация / Э. Таненбаум, А. Вудхалл ; пер. с англ. – 3-е изд. – СПб. : Питер, 2007. – 704 с.

20. Юров, В.И. Assembler : учебник для вузов / В.И. Юров. – 2-е изд. – СПб. : Питер, 2007. – 640 с.

21. Assembler : практикум / В.И. Юров. – СПб.: Питер, 2002. – 400 с.