stringtranslate.com

API-интерфейс Windows

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

Каждая основная версия Windows API имеет свое собственное имя, которое определяет аспект совместимости этой версии. Например, Win32 — это основная версия Windows API, которая работает на 32-разрядных системах. Название Windows API в совокупности относится ко всем версиям этой возможности Windows.

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

Услуги

В этом разделе перечислены важные службы, предоставляемые Windows API. [1]

Базовые услуги

Базовые службы включают такие функции, как файловая система , устройства , процессы , потоки и обработка ошибок . Эти функции находятся вядро.exe,krnl286.exeилиkrnl386.exeфайлы на 16-битной Windows, иkernel32.dll и KernelBase.dllна 32 и 64 бит Windows. Эти файлы находятся в папке\Windows\System32во всех версиях Windows. [2]

Расширенные услуги

Расширенные службы включают функции за пределами ядра, такие как реестр Windows , выключение/перезапуск системы (или прерывание), запуск/остановка/создание службы Windows , управление учетными записями пользователей. Эти функции находятся вadvapi32.dllиadvapires32.dllна 32-битной Windows.

Интерфейс графического устройства

Компонент интерфейса графических устройств (GDI) обеспечивает функции вывода графического контента на мониторы , принтеры и другие устройства вывода . Он находится вgdi.exeна 16-битной Windows иgdi32.dllна 32-битной Windows в пользовательском режиме. Поддержка GDI в режиме ядра обеспечивается, win32k.sysчто напрямую взаимодействует с графическим драйвером. [3] [4]

Пользовательский интерфейс

Компонент пользовательского интерфейса предоставляет функции для создания и управления экранными окнами и большинством основных элементов управления, таких как кнопки и полосы прокрутки , прием ввода с мыши и клавиатуры и другие функции, связанные с графическим пользовательским интерфейсом (GUI) Windows. Этот функциональный блок находится впользователь.exeна 16-битной Windows иuser32.dllна 32-битной Windows. Начиная с версий Windows XP , основные элементы управления находятся вcomctl32.dll, вместе с общими элементами управления (Библиотека общих элементов управления). [5]

Библиотека общих диалоговых окон

Библиотека общих диалоговых окон предоставляет стандартные диалоговые окна для открытия и сохранения файлов, выбора цвета и шрифта и т. д. Библиотека находится в файле с именемcommdlg.dllна 16-битной Windows иcomdlg32.dllна 32-битной Windows. Он сгруппирован в категории Пользовательский интерфейс API. [6]

Библиотека общего управления

Common Control Library обеспечивает доступ к расширенным элементам управления пользовательского интерфейса, включая такие элементы, как строки состояния , индикаторы выполнения , панели инструментов и вкладки . Библиотека находится в файле DLL с именемcommctrl.dllна 16-битной Windows иcomctl32.dllна 32-битной Windows. Он сгруппирован в категории Пользовательский интерфейс API. [7]

Оболочка Windows

Компонент Windows Shell обеспечивает доступ к оболочке операционной системы . Компонент находится вshell.dllна 16-битной Windows иshell32.dllна 32-битной Windows. Функции Shell Lightweight Utility находятся вshlwapi.dll. Он сгруппирован в категории «Пользовательский интерфейс» API. [8] [9]

Сетевые службы

Сетевые службы предоставляют доступ к различным сетевым возможностям операционной системы. Его подкомпоненты включают NetBIOS , Winsock , NetDDE , удаленный вызов процедур (RPC) и многое другое. Этот компонент находится вnetapi32.dllна 32-битной Windows. [10]

Веб

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

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

Windows API — это API на основе языка C. [12] Функции и структуры данных доступны через синтаксис C путем включения windows.h , но API может использоваться через любой язык программирования, который может взаимодействовать со структурами данных API и соглашениями о вызовах для вызовов функций и обратных вызовов .

Следует отметить, что реализация функций API была разработана на нескольких языках, отличных от C. [a]

Несмотря на то, что C не является языком объектно-ориентированного программирования (ООП), Windows API в некоторой степени объектно-ориентирован из-за использования дескрипторов. Различные другие технологии от Microsoft и других делают этот объектно-ориентированный аспект более очевидным, используя язык ООП, такой как C++ — см. Microsoft Foundation Class Library (MFC), Visual Component Library (VCL), GDI+ . Следует отметить, что Windows 8 предоставляет Windows API и WinRT API, который реализован на C++ [13] и является объектно-ориентированным по своей сути. [13]

Windows.pas — это модуль Delphi , который раскрывает возможности Windows API — эквивалент windows.h на Pascal . [14]

Связанные технологии

Многие технологии Microsoft используют Windows API, как и большинство программного обеспечения, работающего в Windows. В качестве промежуточного ПО между Windows API и приложением следующие технологии предоставляют некоторый доступ к Windows API. Некоторые технологии описываются как обёртки Windows API, но это спорно, поскольку они не предоставляют или не раскрывают все возможности Windows API.

Хотя почти все программы Windows используют Windows API, в линейке операционных систем Windows NT программы, которые запускаются на ранних этапах процесса загрузки Windows, вместо этого используют Native API . [15]

История

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

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

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

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

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

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

Одним из самых больших изменений в 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- преобразователей , которая позволяла 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-битных приложений. [22]

Основные версии

Каждая версия Microsoft Windows содержит версию Windows API, и почти каждая новая версия Microsoft Windows вносит дополнения и изменения в Windows API. [23]

Название Windows API относится по сути к одной и той же возможности в каждой версии Windows, но есть и другое название этой возможности, основанное на основных архитектурных аспектах версии Windows, которая ее содержит. Когда была только одна версия, она называлась просто Windows API. Затем, когда было сделано первое крупное обновление, Microsoft дала ей название Win32, а первой версии — Win16. Термин Windows API относится к обеим версиям и всем впоследствии разработанным основным версиям. [24]

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

ReactOS — это бесплатная операционная система с открытым исходным кодом , целью которой является реализация API Windows.

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

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

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

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

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

Для языка C++ Zortech (позже Symantec , затем Digital Mars ), Watcom и Borland выпустили известные коммерческие компиляторы, которые часто использовались с Win16, Win32s и Win32. Некоторые из них поставляли расширители памяти , позволяя программам Win32 работать на Win16 с распространяемой DLL 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 Compiler Collection (GCC), используя автономный набор заголовочных файлов, чтобы упростить компоновку с специфичными для Win32 DLL. LCC -Win32 — это компилятор C, поддерживаемый Jacob Navia, бесплатное программное обеспечение для некоммерческого использования. Pelles C — это бесплатное программное обеспечение для компиляции C, поддерживаемое Pelle Orinius. Free Pascal — это бесплатный программный компилятор Object Pascal , поддерживающий Windows API. Пакет MASM32 — это зрелый проект, обеспечивающий поддержку Windows API в Microsoft Macro Assembler (MASM) с помощью специально созданных или преобразованных заголовков и библиотек из Platform SDK. Плоский ассемблер FASM позволяет собирать программы для Windows без использования внешнего компоновщика, даже при работе в Linux.

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

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

Примечания

  1. ^ И Pascal , и ассемблер x86 активно использовались в более ранних версиях, до того как C стал доминирующим. Напоминанием об этом является то, что функции API все еще используют соглашение о вызовах Pascal для восстановления стека из переданных параметров после вызова (хотя они ожидают, что параметры будут переданы справа налево, как это делают большинство компиляторов C по умолчанию).
  2. ^ Номенклатура выпущенных 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 Edition , Windows Advanced Server 2003 для Itanium и Windows 2008 Advanced Server для Itanium на платформе IA-64 .

Ссылки

  1. ^ Индекс API Windows
  2. ^ Microsoft Developer Network (июль 2005 г.). Базовые службы. Получено 28 августа 2005 г.
  3. ^ Microsoft Developer Network (июль 2005 г.). Интерфейс графических устройств. Получено 28 августа 2005 г.
  4. ^ "G". Microsoft Developer Network . Получено 28 января 2009 г.
  5. ^ Microsoft Developer Network (июль 2005 г.). Пользовательский интерфейс. Получено 28 августа 2005 г.
  6. ^ Microsoft Developer Network (2005). Common Dialog Box Library. Получено 22 сентября 2005 г.
  7. ^ Microsoft Developer Network (июль 2005 г.). Common Control Library. Получено 28 августа 2005 г.
  8. Microsoft Developer Network (июль 2005 г.). Windows Shell. Получено 28 августа 2005 г.
  9. ^ Microsoft Developer Network (2005). Shell Programmer's Guide. Получено 28 августа 2005 г.
  10. ^ Microsoft Developer Network (июль 2005 г.). Сетевые службы. Получено 28 августа 2005 г.
  11. Microsoft Developer Network (январь 2006 г.); Программирование и повторное использование браузера . Получено 22 января 2006 г.
  12. ^ "Пошаговое руководство: создание традиционного приложения Windows Desktop (C++)". Microsoft Docs . 23 февраля 2022 г.
  13. ^ ab Mayberry, Michael (2012). WinRT Revealed . Нью-Йорк: Apress. стр. 3. ISBN 978-1-4302-4585-8.
  14. ^ Тексейра, Стив и Ксавье Пачеко (2002). Руководство разработчика Borland Delphi 6. Сэмс. п. 253. ИСБН 0672321157.
  15. ^ Руссинович, Марк (ноябрь 2006 г.). «Внутри собственных приложений». Microsoft Docs . Получено 12 апреля 2022 г.
  16. ^ Чарльз Петцольд (декабрь 2001 г.). Программирование Microsoft Windows на C# . Microsoft Press. Beyond the Console, стр. 47.
  17. ^ Петцольд, Чарльз. «Печально известная программа Windows «Hello World»». www.charlespetzold.com . Получено 30 июня 2024 г. .
  18. ^ Подробный анализ изменений в Windows API от XP до 10. Получено 8 сентября 2016 г.
  19. ^ Чарльз Петцольд (11 ноября 1998 г.). Программирование Windows, пятое издание . Microsoft Press. API и модели памяти, стр. 9.
  20. ^ Смит, Грэм (8 октября 2022 г.). «В Windows 95 был специальный код, предназначенный только для исправления ошибки в оригинальной SimCity». Rock, Paper, Shotgun .
  21. Raymond Chen (15 октября 2003 г.). А как насчет BOZOSLIVEHERE и TABTHETEXTOUTFORWIMPS? Получено 29 июня 2022 г.
  22. ^ Хоффман, Крис. «В чем разница между папками «System32» и «SysWOW64» в Windows?». How-To Geek . Получено 11 апреля 2023 г.
  23. ^ Проект Iseran (1996–2001). История API Windows. Получено 7 октября 2005 г.
  24. Microsoft Developer Network (июль 2005 г.). Обзор Windows API. Получено 28 августа 2005 г.
  25. ^ "Домашняя страница Windows XP Professional x64 Edition". Microsoft.
  26. ^ «Обзор 64-разрядных вычислений Microsoft». Microsoft.
  27. ^ "MSDN: Подготовка к 64-разрядной версии Windows". Microsoft.
  28. ^ WISE Архивировано 30.03.2008 на Wayback Machine

Внешние ссылки