Windows API

**Windows API** (англ. *application programming interfaces*) — общее наименование целого набора базовых функций интерфейсов программирования приложений операционных систем семейств *Microsoft Windows* корпорации «Майкрософт». Является самым прямым способом взаимодействия приложений с *Windows*. Для создания программ, использующих *Windows API*, «Майкрософт» выпускает комплект разработчика программного обеспечения, который называется *Platform SDK*, и содержит документацию, набор библиотек, утилит и других инструментальных средств для разработки.

## Общие сведения

*Windows API* спроектирован для использования в языке Си для написания прикладных программ, предназначенных для работы под управлением операционной системы MS Windows. Работа через *Windows API* — это наиболее близкий к операционной системе способ взаимодействия с ней из прикладных программ. Более низкий уровень доступа, необходимый только для драйверов устройств, в текущих версиях *Windows* предоставляется через *Windows Driver Model*.

Windows API представляет собой множество функций, структур данных и числовых констант, следующих соглашениям языка Си. Все языки программирования, способные вызывать такие функции и оперировать такими типами данных в программах, исполняемых в среде Windows, могут пользоваться этим API. В частности, это языки C++, Pascal, Visual Basic и многие другие.

Для облегчения программирования под Windows, в компании Microsoft и сторонними разработчиками было предпринято множество попыток создать библиотеки и среды программирования, частично или полностью скрывающие от программиста особенности Windows API, и предоставляющие ту или иную часть его возможностей в более удобном виде. В частности, сама Microsoft в разное время предлагала библиотеки Active Template Library (ATL)/Windows Template Library (WTL), Microsoft Foundation Classes (MFC), .Net/WinForms/WPF, TXLib. Компания Borland (ныне Embarcadero, её преемник в части средств разработки) предлагала OWL и VCL. Есть кросс-платформенные библиотеки, такие как Qt, Tk и многие другие. Весомая часть этих библиотек сконцентрирована на облегчении программирования графического интерфейса пользователя.

Для облегчения переноса на другие платформы программ, написанных с опорой на Windows API, сделана библиотека Wine.

## Версии

* **Win16** — первая версия *WinAPI* для 16-разрядных версий *Windows*. Изначально назывался *Windows API*, позднее был ретроспективно переименован в *Win16* для отличия от *Win32*. Описан в стандарте *ECMA-234*.
* **Win32** — 32-разрядный *API* для современных версий *Windows*. Самая популярная ныне версия. Базовые функции реализованы в динамически подключаемых библиотеках `kernel32.dll` и `advapi32.dll`; базовые модули графического интерфейса пользователя — в `user32.dll` и `gdi32.dll`. *Win32* появился вместе с *Windows NT* и затем был перенесён в несколько ограниченном виде в системы серии *Windows 9x*. В современных версиях *Windows*, происходящих от *Windows NT*, работу *Win32 GUI* обеспечивают два модуля: `csrss.exe` (процесс исполнения клиент-сервер), работающий в пользовательском режиме, и `win32k.sys` в режиме ядра. Работу же системы обеспечивает ядро — `ntoskrnl.exe`.
* **Win32s** — подмножество *Win32*, устанавливаемое на семейство 16-разрядных систем *Windows 3.x* и реализующее ограниченный набор функций *Win32* для этих систем.
* **Win64** — 64-разрядная версия *Win32*, содержащая дополнительные функции *Windows* на платформах *x86-64* и *IA-64*.