Windows API - Windows API

В Windows APIнеофициально WinAPI, это основной набор Microsoft интерфейсы прикладного программирования (API) доступны в Майкрософт Виндоус операционные системы. Название 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 (MFC), Библиотека визуальных компонентов (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 предоставила DirectX API-интерфейсы - слабо связанный набор графических и игровых сервисов, который включает:

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

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

  • DirectShow, который создает и запускает универсальные конвейеры мультимедиа. Это сопоставимо с GStreamer framework и часто используется для рендеринга игровых видео и создания медиаплееров (Проигрыватель Windows Media основан на нем). DirectShow больше не рекомендуется для разработки игр.
  • Фонд СМИ, новый API цифровых медиа, предназначенный для замены DirectShow.

Программное взаимодействие

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

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

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

Библиотеки оболочки

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

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

История

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

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

#включают <stdio.h>int главный(пустота) {    printf("Привет, мир! п");}

Версия для Windows по-прежнему представляла собой всего лишь одну рабочую строку кода, но требовала много-много дополнительных строк. Чарльз Петцольд, написавший несколько книг о программировании для Windows API, сказал: "Оригинал привет мировая программа в 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, и только после Windows 95 началось повсеместное портирование приложений на Win32. Чтобы упростить переход в Windows 95 для разработчиков вне и внутри Microsoft, сложная схема API thunks использовался, что могло позволить 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 бит версии Майкрософт Виндоус. Первоначально они назывались просто 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, в котором реализована подмножество API Win32 для этих систем. «S» означает «подмножество».
  • Win64 это вариант API, реализованный на 64-битный платформы из Архитектура Windows (по состоянию на 2011 г. x86-64 и IA-64 ).[22][23][24] И 32-битные, и 64-битные версии приложения по-прежнему могут быть скомпилированы из одного кодовая база, хотя некоторые старые API-интерфейсы объявлены устаревшими, а некоторые API-интерфейсы, которые уже были объявлены устаревшими в Win32, были удалены. Вся память указатели по умолчанию 64-битные ( LLP64 model), поэтому исходный код необходимо проверить на совместимость с 64-битной арифметика указателя и при необходимости переписать.[25]
  • WinCE это реализация Windows API для Windows CE Операционная система.

Другие реализации

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

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

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

Поддержка компилятора

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

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

Для определенных классов приложений система компилятора также должна уметь обрабатывать язык описания интерфейса (IDL) файлы. В совокупности эти предварительные требования (компиляторы, инструменты, библиотеки и заголовки) известны как Пакет SDK для платформы Microsoft. Какое-то время 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, поддерживаемый Джейкобом Навиа, бесплатное ПО для некоммерческого использования. Пеллес С - это бесплатный компилятор C, поддерживаемый Пелле Ориниус. Free Pascal это бесплатно программное обеспечение Object Pascal компилятор, поддерживающий Windows API. Пакет MASM32 - зрелый проект, обеспечивающий поддержку Windows API под Ассемблер макросов Microsoft (MASM) с помощью созданных или преобразованных заголовков и библиотек из Platform SDK. Плоский сборщик FASM позволяет создавать программы Windows без использования внешнего компоновщика, даже при работе в Linux.

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

Смотрите также

Примечания

  1. ^ Microsoft TechNet (Ноябрь 2006 г.). Внутри собственных приложений. Проверено 24 декабря 2008 года.
  2. ^ «Пошаговое руководство. Создание настольных приложений Windows (C ++)». msdn.microsoft.com.
  3. ^ Оба языка Паскаль и сборка x86 активно использовался в более ранних версиях Windows API до того, как C. Напомним, что функции API по-прежнему используют Соглашение о вызовах Паскаля для восстановления стека из переданных параметров после вызова (хотя они ожидают, что параметры будут перемещены справа налево, как это делают большинство компиляторов C по умолчанию).
  4. ^ а б Мэйберри, Майкл (2012). Раскрытие WinRT. Нью-Йорк: Апресс. п. 3. ISBN  978-1-4302-4585-8.
  5. ^ а б Сеть разработчиков Microsoft (Июль 2005 г.). Обзор Windows API. Проверено 28 августа 2005 года.
  6. ^ Сеть разработчиков Microsoft (Июль 2005 г.). Базовые услуги. Проверено 28 августа 2005 года.
  7. ^ Сеть разработчиков Microsoft (Июль 2005 г.). Интерфейс графического устройства. Проверено 28 августа 2005 года.
  8. ^ "ГРАММ". Сеть разработчиков Microsoft. Получено 2009-01-28.
  9. ^ Сеть разработчиков Microsoft (Июль 2005 г.). Пользовательский интерфейс. Проверено 28 августа 2005 года.
  10. ^ Сеть разработчиков Microsoft (2005). Библиотека общих диалоговых окон. Проверено 22 сентября 2005 года.
  11. ^ Сеть разработчиков Microsoft (Июль 2005 г.). Общая библиотека управления. Проверено 28 августа 2005 года.
  12. ^ Сеть разработчиков Microsoft (Июль 2005 г.). Оболочка Windows. Проверено 28 августа 2005 года.
  13. ^ Сеть разработчиков Microsoft (2005). Руководство программиста Shell. Проверено 28 августа 2005 года.
  14. ^ Сеть разработчиков Microsoft (Июль 2005 г.). Сетевые службы. Проверено 28 августа 2005 года.
  15. ^ Сеть разработчиков Microsoft (Январь 2006 г.); Программирование и повторное использование браузера Проверено 22 января 2006 года.
  16. ^ Тексейра, Стив и Ксавье Пачеко (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. ^ Изеранский проект (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, 64-разрядная версия Windows XP, 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. ^ МУДРЫЙ В архиве 2008-03-30 на Wayback Machine

внешняя ссылка