Автор: Роман Панышев (irrona)
С 1991 года операциаонная система Windows, созданная компанией Microsoft сменила несколько версий. За это время она выпускалась и для 16-разрядных процессоров и для 32-разрядных. А сегодня уже появились версии Windows для работы с 64-разрядными процессорами. Менялся не только дизайн системы, но и принципы ее внутренней архитектуры. Неизменным по сей день остается одно - наличие динамических библиотек (DLL), являющихся основными поставщиками функций (Application Programming Interface - API) для работы системы и приложений. С самого начала необходимо усвоить один важный момент: API - не то же самое, что операционная система, но конкретный API можно использовать только на определенных версиях Windows.
Поскольку 32-разрядные процессоры сегодня еще имеют наибольшее "хождение". На мой взгляд это происходит не столько из-за отсутствия достаточного количества приложений и драйверов оборудования, сколько из-за привычки основного большинства программистов создавать приложения для 32-битных систем. Соответственно и я в данном цикле статей основной упор буду делать на 32-разрядный API и 32-разрядные системы Windows (в основном начиная с версии Windows 2000).
За время существования 32-разрядной Windows функции API не изменились, меняется лишь их количество. Для удобства разработчиков Windows, а может это они позаботились о программистах, пишущих программы для Windows, все функции API разбиты на определенные категории и находятся в соответствующих библиотеках динамической компоновки (DLL). Вот далеко не полный перечень таких библиотек:
Библиотека | Описание |
kernel32.dll | Системные функции низкого уровня. В этой библиотеке находятся функции управления памятью, задачами, распределения ресурсов и т.д. |
user32.dll | Функции, управляющие работой Windows. В этой библиотеке находятся функции для работы с сообщениями, меню, указателями мыши, курсорами, таймерами и большинство других функций, не связанных с выводом на экран. |
gdi32.dll | Библиотека интерфейса графических устройств (GDI). Содержит функции, связанные с выводом на устройства. В ней находится большинство функций рисования, работы с контекстами устройств, метафайлами, координатами и шрифтами. |
comdlg32.dll lz32.dll version32.dll |
Эти библиотеки обеспечивают дополнительные возможности, в том числе поддержку стандартных диалоговых окон, сжатия файлов и контроля версий. |
advapi32.dll | Библиотека содержит функции для работы с реестром Windows и файлами инициализации (INI). |
wininet.dll | В данной библиотеке содержатся функции для использования Internet и FTP. |
netapi32.dll | Сетевые функции Windows |
crypt32.dll cryptdll.dll cryptnet.dll |
В библиотеках содержатся криптографические функции и функции для работы с крипто-провайдерами. |
ntdll.dll | Иногда в других библиотеках API функции всего лишь объявлены, а реализованы в данной библиотеке, но с другим именем. |
comctl32.dll | В этой библиотеке реализован новый (усовершенствованный) набор управляющих элементов Windows, в числе которых - иерархические списки и улучшенные текстовые поля. |
mapi32.dll | Содержит функции для работы с электронной почтой. |
odbc32.dll | Это одна из dll, реализующих архитектуру
ODBC (Open Database Connectivity). Функции предоставляют API для работы с базами данных. |
winmm.dll | Обеспечивает доступ к мультимедия. |
Эти DLL находятся в системной папке Windows. Есть API функции, которые были созданы во времена Windows 9x и которые не работают на операционных системах семейства Windows NT. Но, по своему опыту могу сказать, что чаще возникает обратная ситуация - когда использованная при написании приложения API функция прекрасно работает на Windows 2000 и выдает ошибки при запуске приложения на Windows 9x. На такие особенности я, по сложившейся в MSDN традиции, буду указывать отдельно.
Все примеры к статьям написаны с использованием практически голого API. Исключение составляют лишь инструкции процессора, связанные с пересылкой данных. Поэтому портировать данный код на другие ассемблерные языки, либо на С или С++, думаю не составит особой сложности.
Windows API развивается очень быстро. Количество функций растет так быстро, что уследить за всеми новшествами практически невозможно. Но, к счастью, это и не нужно. Чтобы профессионально пользоваться Windows API, необязательно становиться знатоком во всех его областях. Важно понять основные концепции использования, предоставляемых Windows функций и научиться читать документацию по API.