Структуры данных для использования системных функций
Для использования более сложных функций APIнеобходимо использовать специальные структуры данных. Вся концепция программирования вWINDOWSоснована на четком благоустройстве структур данных, связанных с ними программ-функций и констант-параметров. Данные, что связанные с выполнением одной функции объединяются в блок определенной длины (он называется структурой). Элементами таких структур могут быть другие структуры и т.д. Существуют структуры общего пользования, которые не связаны с конкретной функциейAPI, а содержат справочную информацию о системе, файлах, пользователе, и тому подобное. Данные, что сохраняются в этих структурах постоянно изменяются и порой их невозможно предусмотреть. Потому для получения этих данных нельзя пользоваться обычными командами чтения из памяти типа "mov". Перед пользованием такой динамической информацией необходимо проверить, готова ли информация для потребления. Во избежание некорректности при условии параллельного выполнения процессов каждое обращение к системной информации необходимо регистрировать. Потому фактически существует два типа функцийAPI:
функции, которые выполняют действие;
функции, которые получают информацию.
Специализированые каталоги windows
Операционная система – это среда для "сосуществования" многих программ, которые взаимодействуют между собой и используют общие ресурсы. Для того, чтобы избежать противоречий между программами и хранить настройки системы, разработчики WINDOWS ввели специальную базу данных, которая называется реестром. Реестр сохраняется в файлах user.dat но system.dat. В половине случаев крах операционной системы связан с неверной информацией именно в этих файлах.
Реестр напоминает дерево каталогов, каждый из которых называется ключом. Каждая программа, которая пользуется общими системными ресурсами делает записи в реестр какие именно ресурсы она использует и какие начальные параметры давать при старте.
Кроме того, в операционной системе WINDOWSсуществуют специальные каталоги, в которых файлы сохраняются за определенным назначением и могут отображаться в виде меню. За каждым таким специализированным каталогом закрепленный определен внутренний индекс, который отражается определенной стандартной константой. Ниже приведены некоторые из этих констант, их значение и содержание:
Константа |
Значения |
Комментарии |
CSIDL_DESKTOP |
0 |
Программы, которые находятся на экране - "Рабочий стол" (Desktop) |
CSIDL_PROGRAMS |
2 |
Пункт системного меню "Программы" (Program files) |
CSIDL_PRINTERS |
4 |
Содержит установленные принтеры |
CSIDL_PERSONAL |
5 |
Папка "Мои документы" (MyDocuments) |
CSIDL_FAVORITES |
6 |
Папка "Избранное" (Favorites) |
CSIDL_STARTUP |
7 |
Программы, которые стартуют автомати-чески "Автозагрузка" (Startup) |
CSIDL_RECENT |
8 |
Системное меню "Документы" (Documents) |
CSIDL_SENDTO |
9 |
Содержание пункта меню "Отправить" (SendTo) |
CSIDL_STARTMENU |
0bh |
Содержания раздела "Главное меню" (StartMenu) |
CSIDL_NETHOOD |
13h |
Раздела "Сетевое окружение" (Network neighborhood) |
CSIDL_FONTS |
14h |
Папки с шрифтами WINDOWS (Fonts) |
CSIDL_TEMPLATES |
15h |
Шаблонов документов (Templates) |
CSIDL_APPDATA |
1ah |
Рабочие папки установленных программ |
CSIDL_INTERNET |
20h |
Временные INTERNET-файлы |
CSIDL_COOKIES |
21h |
Файлов персонализации доступа в INTERNET |
CSIDL_HISTORY |
22h |
Отчета о работе пользователя |
Пользователь получает название специализированного каталога за 2 шага:
С помощью функции SHGetSpecialFolderLocation находит дескриптор (хендл) специализированной папки, который зависит от индекса, который находится в таблице;
С помощью функции SHGetPathFromIDList по хендлу находит название самой папки.