Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Windows API , неформально WinAPI , является основным набором Microsoft по интерфейсам прикладного программирования (API) , доступных в Microsoft Windows операционных систем. Название Windows API в совокупности относится к нескольким различным реализациям платформы, которые часто называются их собственными именами (например, Win32 API ); см. раздел версий . Почти все программы Windows взаимодействуют с Windows API. В линейке операционных систем Windows NT небольшое количество (например, программы, запущенные на ранней стадии процесса запуска Windows ) используют собственный API . [1]

Поддержка разработчиков доступна в форме пакета разработки программного обеспечения , Microsoft Windows SDK , который предоставляет документацию и инструменты, необходимые для создания программного обеспечения на основе Windows API и связанных интерфейсов Windows.

Windows API (Win32) ориентирован в основном на язык программирования C [2], поскольку его открытые функции и структуры данных описаны на этом языке в последних версиях документации. Однако API может использоваться любым компилятором или ассемблером языка программирования, способным обрабатывать (четко определенные) низкоуровневые структуры данных вместе с предписанными соглашениями о вызовах для вызовов и обратных вызовов . Точно так же внутренняя реализация функции API исторически разрабатывалась на нескольких языках. [3] Несмотря на то, что C не является объектно-ориентированным программированиемязык, Windows API и Windows исторически описывались как объектно-ориентированные. Также было много классов-оболочек и расширений (от Microsoft и других) для объектно-ориентированных языков, которые делают эту объектно-ориентированную структуру более явной ( Microsoft Foundation Class Library (MFC), Visual Component Library (VCL), GDI + и т. Д.) . Например, Windows 8 предоставляет Windows API и WinRT API, которые реализованы на C ++ [4] и являются объектно-ориентированными по своей конструкции. [4]

Обзор [ править ]

Функции, предоставляемые Windows API, можно разделить на восемь категорий: [5]

Базовые услуги
[6] Обеспечьте доступ к основным ресурсам, доступным для системы Windows. Включены такие вещи, как файловые системы , устройства , процессы , потоки и обработка ошибок . Эти функции находятся вkernel.exe, krnl286.exe или же krnl386.exe файлы в 16-битной Windows и kernel32.dll и KernelBase.dllна 32- и 64-битной Windows. Эти файлы находятся в папке\ Windows \ System32 на всех версиях Windows.
Расширенные услуги
Обеспечьте доступ к функциям за пределами ядра. Включены такие вещи, как реестр Windows , выключение / перезагрузка системы (или прерывание), запуск / остановка / создание службы Windows , управление учетными записями пользователей. Эти функции находятся вadvapi32.dll а также advapires32.dll в 32-битной Windows.
Интерфейс графического устройства
[7] Предоставляет функции для вывода графического содержимого на мониторы , принтеры и другие устройства вывода . Он находится вgdi.exe в 16-битной Windows и gdi32.dllна 32-битной Windows в пользовательском режиме. Обеспечивается поддержка GDI в режиме ядра, win32k.sysкоторая напрямую взаимодействует с графическим драйвером. [8]
Пользовательский интерфейс
[9] Предоставляет функции для создания и управления экранными окнами и большинством основных элементов управления, таких как кнопки и полосы прокрутки , получение ввода с мыши и клавиатуры, а также другие функции, связанные счастью графического интерфейса пользователя (GUI) Windows. Этот функциональный блок находится вuser.exe в 16-битной Windows и user32.dllв 32-битной Windows. Начиная с версий Windows XP , основные элементы управления находятся вcomctl32.dllвместе с общими элементами управления (Common Control Library).
Библиотека общих диалоговых окон
[10] Предоставляет приложениям стандартные диалоговые окна для открытия и сохранения файлов, выбора цвета и шрифта и т. Д. Библиотека находится в файле с именемcommdlg.dll в 16-битной Windows и comdlg32.dllв 32-битной Windows. Он сгруппирован в категории « Пользовательский интерфейс » API.
Общая библиотека управления
[11] Предоставляет приложениям доступ к некоторым расширенным элементам управления, предоставляемым операционной системой. К ним относятся такие вещи, как строки состояния , индикаторы выполнения , панели инструментов и вкладки . Библиотека находится вфайле библиотеки динамической компоновки (DLL), который называетсяcommctrl.dll в 16-битной Windows и comctl32.dllв 32-битной Windows. Он сгруппирован в категории « Пользовательский интерфейс » API.
Оболочка Windows
[12] [13] Компонент Windows API позволяет приложениям получать доступ к функциям, предоставляемым оболочкой операционной системы , а также изменять и улучшать их. Компонент находится вshell.dll в 16-битной Windows и shell32.dllв 32-битной Windows. Облегченные служебные функции оболочки находятся вshlwapi.dll. Он сгруппирован в категории « Пользовательский интерфейс » API.
Сетевые службы
[14] Предоставьте доступ к различным сетевым возможностям операционной системы. Его подкомпоненты включают NetBIOS , Winsock , NetDDE , удаленный вызов процедур (RPC) и многие другие. Этот компонент находится вnetapi32.dll в 32-битной Windows.

Интернет [ править ]

Internet Explorer (IE) веб - браузер также предоставляет множество API - интерфейсов, которые часто используются в приложениях, и в качестве таковых можно рассматривать как часть Windows API. IE был включен в операционную систему со времен Windows 95 OSR2 и предоставлял веб-сервисы приложениям с Windows 98 . [15] В частности, он используется для обеспечения:

  • Встраиваемый элемент управления веб-браузера, содержащийся в shdocvw.dll а также mshtml.dll.
  • Служба присвоения URL-адресов, хранящаяся в urlmon.dll, который предоставляет COM-объекты приложениям для разрешения URL-адресов. Приложения также могут предоставлять свои собственные обработчики URL-адресов для использования другими.
  • Клиентская библиотека HTTP, которая также учитывает общесистемные настройки прокси (wininet.dll); однако Microsoft добавила еще одну клиентскую библиотеку HTTP под названием winhttp.dll, которая меньше по размеру и больше подходит для некоторых приложений.
  • Библиотека для поддержки многоязычного и международного текста (mlang.dll).
  • DirectX Transforms, набор компонентов фильтра изображений.
  • Поддержка XML (компоненты MSXML, хранящиеся в msxml * .dll).
  • Доступ к адресным книгам Windows.

Мультимедиа [ править ]

Классический Windows Multimedia API помещен в winmm.dll и содержит функции для воспроизведения звуковых файлов, отправки и получения MIDI-сообщений, для доступа к джойстикам и для облегчения всех других функций так называемой подсистемы MCI Windows, которая происходит от Мультимедийные расширения доступны для Windows 3.0 отдельно и как неотъемлемая часть операционной системы, начиная с Windows 3.1, в то время они находились в mmsystem.dll.

Кроме того, как часть каждой версии Windows, начиная с Windows 95 OSR2, Microsoft предоставляет API DirectX - слабо связанный набор графических и игровых сервисов, который включает:

  • Direct2D для двумерной векторной графики с аппаратным ускорением.
  • Direct3D для 3D-графики с аппаратным ускорением.
  • DirectSound для низкоуровневого доступа к звуковой карте с аппаратным ускорением.
  • DirectInput для связи с устройствами ввода, такими как джойстики и геймпады.
  • DirectPlay как многопользовательская игровая инфраструктура. Этот компонент устарел в DirectX 9, и Microsoft больше не рекомендует его использовать для разработки игр.
  • DirectDraw для 2D-графики в более ранних версиях DirectX теперь устарел и заменен Direct2D.
  • WinG для 2D-графики в 16-битных играх, написанных для версий Windows 3.x. Устарело с выпуском Windows 95.

Microsoft также предоставляет несколько API для кодирования и воспроизведения мультимедиа:

  • DirectShow , который создает и запускает универсальные конвейеры мультимедиа. Он сравним с платформой GStreamer и часто используется для рендеринга игрового видео и создания медиаплееров ( на нем основан Windows Media Player ). DirectShow больше не рекомендуется для разработки игр.
  • Media Foundation , новый API цифровых медиа, предназначенный для замены DirectShow.

Взаимодействие с программой [ править ]

Windows API предназначен в основном для взаимодействия между операционной системой и приложением. Для связи между различными приложениями Windows Microsoft разработала ряд технологий наряду с основным Windows API. Это началось с динамического обмена данными (DDE), который был заменен на связывание и внедрение объектов (OLE), а затем на модель компонентных объектов (COM), объекты автоматизации , элементы управления ActiveX и .NET Framework . Между этими технологиями не всегда существует четкое различие, и есть много общего.

Разнообразие терминов в основном является результатом группировки программных механизмов, относящихся к определенному аспекту разработки программного обеспечения. Автоматизация, в частности, относится к экспорту функции приложения или компонента (в виде интерфейса прикладного программирования (API)), чтобы им могли управлять другие приложения, а не только пользователи. .NET - это автономная общая методология и технология для разрабатывать настольные и веб-приложения, написанные на различных языках JIT-компиляции .

Windows.pas - это модуль Pascal / Delphi, который содержит декларации API для Windows . Это Паскаль, эквивалент windows.h , используемый в C. [16]

Библиотеки оболочки [ править ]

Microsoft разработала различные оболочки , которые взяли на себя некоторые из низкоуровневых функций Windows API и позволили приложениям более абстрактно взаимодействовать с API. Библиотека классов Microsoft Foundation (MFC) обернула функциональность Windows API в классы C ++ и, таким образом, обеспечивает более объектно-ориентированный способ взаимодействия с API. Библиотека активных шаблонов (ATL) - это ориентированная на шаблоны оболочка для COM. Библиотека шаблонов для Windows (WTL) была разработана в качестве дополнения к ATL, и предназначена как меньшая альтернатива MFC.

Большинство фреймворков приложений для Windows (по крайней мере частично) обертывают Windows API. Таким образом, .NET Framework и Java , как и любые другие языки программирования в Windows, являются (или содержат) библиотеками-оболочками.

История [ править ]

Windows API всегда открывал программистам большую часть базовой структуры систем Windows. Это давало им большую гибкость и власть над своими приложениями, но также создавало большую ответственность за то, как приложения обрабатывают различные низкоуровневые, иногда утомительные операции, связанные с графическим пользовательским интерфейсом .

Например, начинающий программист на C часто будет писать простой «привет, мир» в качестве своего первого задания. Рабочая часть программы - это всего лишь одна строка printf внутри основной подпрограммы. Накладные расходы на связывание со стандартной библиотекой ввода-вывода также составляют всего одну строку:

#include  <stdio.h>int  main ( void )  {  printf ( "Привет, мир! \ n " ); }

Версия для Windows по-прежнему представляла собой всего лишь одну рабочую строку кода, но требовала много, много дополнительных строк служебной информации. Чарльз Петцольд , написавший несколько книг о программировании для Windows API, сказал: «Первоначальная программа hello world в Windows 1.0 SDK была немного скандальной. HELLO.C занимал около 150 строк, а сценарий ресурса HELLO.RC было еще около 20 строк. (...) Опытные программисты часто свертывались в клубок от ужаса или смеха, сталкиваясь с программой Windows hello-world ». [17]

С годами в системы Windows были внесены различные изменения и дополнения, и Windows API изменился и расширился, чтобы отразить это. [18] Windows API для Windows 1.0 поддерживал менее 450 вызовов функций , тогда как современные версии Windows API поддерживают тысячи. Однако в целом интерфейс оставался довольно согласованным, и старое приложение Windows 1.0 по-прежнему будет выглядеть знакомым программисту, который привык к современному Windows API. [19]

Microsoft постаралась сохранить обратную совместимость . Для этого при разработке новых версий Windows Microsoft иногда применяла обходные пути, чтобы обеспечить совместимость со сторонним программным обеспечением, которое использовало предыдущую версию недокументированным или даже нежелательным образом. Рэймонд Чен , разработчик Microsoft, работающий над Windows API, сказал: «Я, вероятно, мог бы месяцами писать исключительно о плохих вещах, которые делают приложения, и о том, что нам нужно сделать, чтобы заставить их снова работать (часто вопреки самим себе). вот почему я особенно злюсь, когда люди обвиняют Microsoft в злонамеренном взломе приложений при обновлении ОС. Если какое-либо приложение не запускалось в Windows 95, я воспринимал это как личную неудачу ». [20]

Одним из самых значительных изменений в Windows API стал переход с Win16 (поставляется в Windows 3.1 и старше) на Win32 (Windows NT и Windows 95 и выше). Хотя Win32 был первоначально представлен в Windows NT 3.1, а Win32s позволяли использовать подмножество Win32 до Windows 95, массовый перенос приложений на Win32 начался только в Windows 95. Чтобы облегчить переход, в Windows 95 для разработчиков вне и внутри Microsoft использовалась сложная схема преобразователей API, которая позволяла 32-битному коду вызывать 16-битный код (для большинства API Win16) и наоборот. Плоские трусикипозволял 32-битный код вызывать в 16-битные библиотеки, и эта схема широко использовалась в библиотеках Windows 95, чтобы избежать переноса всей ОС на Win32 одним пакетом. В Windows NT операционная система была чистой 32-битной, за исключением частей для совместимости с 16-битными приложениями, и только общие преобразователи были доступны для преобразования из Win16 в Win32, как для Windows 95. Platform SDK поставлялся с компилятором, который мог производить код, необходимый для этих преобразователей. Версии 64-битной Windows также могут запускать 32-битные приложения через WoW64 . Папка SysWOW64, расположенная в папке Windows на диске ОС, содержит несколько инструментов для поддержки 32-битных приложений. [ необходима цитата ]

Версии [ править ]

Почти каждая новая версия Microsoft Windows вносит свои дополнения и изменения в Windows API. [21] Имя API, однако, оставалось неизменным для разных версий Windows, а изменения имен были ограничены основными архитектурными изменениями и изменениями платформы для Windows. Со временем Microsoft изменила название тогдашнего семейства API Win32 на Windows API и превратила его в универсальный термин как для прошлых, так и для будущих версий API. [5]

  • Win16 - это API для первых 16-разрядных версий Microsoft Windows . Первоначально они назывались просто Windows API , но позже были переименованы в Win16, чтобы отличить их от более новой 32-разрядной версии Windows API. Функции Win16 API находятся в основном в основных файлах ОС: kernel.exe (или krnl286.exe или krnl386.exe ), user.exe и gdi.exe . Несмотря на расширение файла изEXE, на самом деле это библиотеки с динамической компоновкой .
  • Win32 - это 32-разрядный интерфейс прикладного программирования (API) для версий Windows начиная с 95. API состоит из функций, реализованных, как и в Win16, в системных библиотеках DLL. Основные библиотеки DLL Win32 - это kernel32.dll , user32.dll и gdi32.dll . Win32 был представлен в Windows NT . Версия Win32, поставляемая с Windows 95, первоначально называлась Win32c, где c означало совместимость . Позднее Microsoft отказалась от этого термина в пользу Win32.
  • Win32s - это расширение семейства Windows 3.1x Microsoft Windows, в котором реализован подмножество Win32 API для этих систем. «S» означает «подмножество».
  • Win64 является вариант API реализован на 64-разрядных платформах в архитектуре Windows , (по состоянию на 2011 x86-64 и IA-64 ). [22] [23] [24] Как 32-битные, так и 64-битные версии приложения по-прежнему могут быть скомпилированы из одной кодовой базы , хотя некоторые старые API устарели, а некоторые API, которые уже были устаревшими в Win32, были удалены. . Все указатели памяти по умолчанию 64-битные ( модель LLP64 ), поэтому исходный код необходимо проверить на совместимость с арифметикой 64-битных указателей и при необходимости переписать. [25]
  • WinCE - это реализация Windows API для операционной системы Windows CE .

Другие реализации [ править ]

Проект Wine обеспечивает уровень совместимости Win32 API для Unix-подобных платформ между API ядра Linux и программами, написанными для Windows API. ReactOS идет еще дальше и стремится реализовать полную операционную систему Windows, тесно сотрудничая с проектом Wine, чтобы продвигать повторное использование кода и совместимость. DosWin32 и HX DOS Extender - это другие проекты, которые эмулируют Windows API и позволяют выполнять простые программы Windows из командной строки DOS . Odin - это проект для эмуляции Win32 на OS / 2, заменяя исходную эмуляцию Win-OS / 2, основанную на коде Microsoft. Другие второстепенные реализации включают библиотеки MEWEL и Zinc, которые были предназначены для реализации подмножества Win16 API в DOS (см. Список независимых от платформы библиотек GUI ).

Windows Interface Source Environment (WISE) - это программа лицензирования от Microsoft, которая позволяла разработчикам перекомпилировать и запускать Windows-приложения на платформах Unix и Macintosh . Пакеты WISE SDK были основаны на эмуляторе Windows API, который мог работать на этих платформах. [26]

Усилия по стандартизации включали общедоступный интерфейс Windows (PWI) Sun для Win16 (см. Также: двоичный интерфейс приложений Sun Windows ( Wabi )), интерфейс прикладного программирования Willows Software для Windows (APIW) для Win16 и Win32 (см. Также Willows TWIN ) и ECMA-234 , в котором предпринята попытка обязательной стандартизации Windows API.

Поддержка компилятора [ править ]

Для разработки программного обеспечения, использующего Windows API, компилятор должен иметь возможность использовать указанные выше библиотеки DLL, относящиеся к Microsoft (COM-объекты находятся вне Win32 и предполагают определенный макет vtable). Компилятор должен либо обрабатывать файлы заголовков, которые раскрывают имена внутренних функций API, либо предоставлять такие файлы.

Что касается языка C ++, Zortech (позже Symantec , затем Digital Mars ), Watcom и Borland создали хорошо известные коммерческие компиляторы, которые часто использовались с Win16, Win32s и Win32. Некоторые из них поставляли расширители памяти , позволяющие программам Win32 работать на Win16 с распространяемой библиотекой Win32s от Microsoft. Компилятор Zortech, вероятно, был одним из первых стабильных и пригодных для использования компиляторов C ++ для программирования Windows до того, как у Microsoft появился компилятор C ++.

Для определенных классов приложений система компиляции также должна иметь возможность обрабатывать файлы языка описания интерфейса (IDL). В совокупности эти предварительные требования (компиляторы, инструменты, библиотеки и заголовки) известны как Microsoft Platform SDK . Какое-то время интегрированная система разработки Microsoft Visual Studio и Borland были единственными интегрированными средами разработки (IDE), которые могли это обеспечить (хотя SDK можно бесплатно загрузить отдельно от всего пакета IDE из Microsoft Windows SDK для Windows). 7 и .NET Framework 4 ).

С 2016 года проекты MinGW и Cygwin также предоставляют такую ​​среду на основе коллекции компиляторов GNU (GCC) с использованием автономного набора файлов заголовков, чтобы упростить связывание с библиотеками DLL, специфичными для Win32. LCC-Win32 - это компилятор C, поддерживаемый Джейкобом Навиа, бесплатное программное обеспечение для некоммерческого использования. Pelles C - это бесплатный компилятор C, поддерживаемый Pelle Orinius. Free Pascal - это бесплатный программный компилятор Object Pascal, который поддерживает Windows API. Пакет MASM32 - зрелый проект, обеспечивающий поддержку Windows API в Microsoft Macro Assembler.(MASM) с помощью настраиваемых или преобразованных заголовков и библиотек из Platform SDK. Плоский ассемблер FASM позволяет создавать программы Windows без использования внешнего компоновщика, даже при работе в Linux.

Поддержка компилятора Windows также необходима для структурированной обработки исключений (SEH). Эта система служит двум целям: она обеспечивает основу, на которой может быть реализована специфичная для языка обработка исключений , и именно так ядро ​​уведомляет приложения об исключительных условиях, таких как разыменование недопустимого указателя или переполнение стека. Компиляторы Microsoft / Borland C ++ имели возможность использовать эту систему, как только она была представлена ​​в Windows 95 и NT, однако фактическая реализация была недокументирована и ее пришлось перепроектировать для проекта Wine и бесплатных компиляторов. SEH основан на размещении кадров обработчика исключений в стеке с последующим добавлением их в связанный список, хранящийся в локальном хранилище потока.(первое поле блока среды потока). Когда генерируется исключение, ядро ​​и базовые библиотеки раскручивают обработчики стека и фильтруют по мере их обнаружения. В конце концов, каждое исключение, не обработанное приложением, будет обрабатываться обработчиком обратного останова по умолчанию, который открывает диалоговое окно общего сбоя Windows.

См. Также [ править ]

  • Библиотеки Windows для OS / 2
  • Interix
  • API ядра Linux
  • Файлы библиотеки Microsoft Windows
  • Устаревшие аудиокомпоненты Windows
  • C ++ / WinRT , библиотека, обеспечивающая доступ к среде выполнения Windows

Заметки [ править ]

  1. ^ Microsoft TechNet (ноябрь 2006 г.). Внутри собственных приложений. Проверено 24 декабря 2008 года.
  2. ^ «Пошаговое руководство: Создание настольных приложений Windows (C ++)» . msdn.microsoft.com .
  3. ^ Оба языка - Pascal и сборка x86 - активно использовались в более ранних версиях Windows API до того, как C стал доминирующим. Напоминание об этом состоит в том, что функции API по-прежнему используют соглашение о вызовах Паскаля для восстановления стека из переданных параметров после вызова (хотя они ожидают, что параметры будут перемещаться справа налево, как это делает большинство компиляторов C по умолчанию).
  4. ^ a b Мэйберри, Майкл (2012). Обнаружен WinRT . Нью-Йорк: Апресс. п. 3. ISBN 978-1-4302-4585-8.
  5. ^ a b Сеть разработчиков Microsoft (июль 2005 г.). Обзор Windows API. Проверено 28 августа 2005 года.
  6. ^ Microsoft Developer Network (июль 2005 г.). Базовые услуги. Проверено 28 августа 2005 года.
  7. ^ Microsoft Developer Network (июль 2005 г.). Интерфейс графического устройства. Проверено 28 августа 2005 года.
  8. ^ "G" . Сеть разработчиков Microsoft . Проверено 28 января 2009 .
  9. ^ Microsoft Developer Network (июль 2005 г.). Пользовательский интерфейс. Проверено 28 августа 2005 года.
  10. ^ Microsoft Developer Network (2005). Библиотека общих диалоговых окон. Проверено 22 сентября 2005 года.
  11. ^ Microsoft Developer Network (июль 2005 г.). Общая библиотека управления. Проверено 28 августа 2005 года.
  12. ^ Microsoft Developer Network (июль 2005 г.). Оболочка Windows. Проверено 28 августа 2005 года.
  13. ^ Microsoft Developer Network (2005). Руководство программиста Shell. Проверено 28 августа 2005 года.
  14. ^ Microsoft Developer Network (июль 2005 г.). Сетевые службы. Проверено 28 августа 2005 года.
  15. ^ Microsoft Developer Network (январь 2006 г.); Программирование и повторное использование браузера. Проверено 22 января 2006 г..
  16. ^ Texeira, Стив и Ксавье Пачеко (2002). Руководство разработчика Borland Delphi 6 . Sams. п. 253. ISBN. 0672321157.
  17. Чарльз Петцольд (декабрь 2001 г.). Программирование Microsoft Windows с помощью C # . Microsoft Press. Помимо консоли, стр. 47.
  18. ^ Подробный анализ изменений в Windows API с XP до 10. Проверено 8 сентября 2016 г.
  19. Чарльз Петцольд (11 ноября 1998 г.). Программирование Windows, пятое издание . Microsoft Press. API и модели памяти, страница 9.
  20. Раймонд Чен (15 октября 2003 г.). А как насчет BOZOSLIVEHERE и TABTHETEXTOUTFORWIMPS? Проверено 27 августа 2005 года.
  21. ^ The Iseran Project (1996–2001). История Windows API. Проверено 7 октября 2005 года.
  22. ^ Номенклатура выпущенных 64-битных версий включает Windows XP Professional x64 Edition и x64 Editions Windows Server 2003, Windows Vista и Windows Server 2008 на платформе x86-64 (AMD64) и Windows 2000 Server Limited Edition, Windows XP 64-bit. издание , Windows Advanced Server 2003 для процессоров Itanium и Windows 2008 Advanced Server для Itanium на IA-64 платформы
  23. ^ "Домашняя страница Windows XP Professional x64 Edition" . Microsoft.
  24. ^ «Обзор 64-битных вычислений Microsoft» . Microsoft.
  25. ^ «MSDN: Подготовка к 64-битной Windows» . Microsoft.
  26. WISE. Архивировано 30 марта 2008 г. в Wayback Machine.

Внешние ссылки [ править ]

  • Индекс MSDN Windows API
  • Примеры кода Microsoft Windows API
  • ECMA-234 - стандарт ECMA для подмножества Windows API
  • Группа новостей Advanced Win32 API
  • Группа новостей французского Win32 API