stringtranslate.com

Windows API

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

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

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

Услуги

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

Базовые услуги
Предоставляет доступ к основным ресурсам, доступным системе Windows. Включены такие вещи, как файловые системы , устройства , процессы , потоки и обработка ошибок . Эти функции находятся вядро.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.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, вместе с общими элементами управления (Common Control Library). [5]
Библиотека общих диалоговых окон
Предоставляет приложениям стандартные диалоговые окна для открытия и сохранения файлов, выбора цвета и шрифта и т. д. Библиотека находится в файле с именемcommdlg.dllв 16-битной Windows иcomdlg32.dllв 32-битной Windows. Он сгруппирован в категории «Пользовательский интерфейс» API. [6]
Общая библиотека управления
Предоставляет приложениям доступ к некоторым расширенным элементам управления, предоставляемым операционной системой. К ним относятся такие элементы, как строки состояния , индикаторы выполнения , панели инструментов и вкладки . Библиотека находится в файле библиотеки динамической компоновки (DLL) с именемcommctrl.dllв 16-битной Windows иcomctl32.dllв 32-битной Windows. Он сгруппирован в категории «Пользовательский интерфейс» API. [7]
Оболочка Windows
Компонент Windows API позволяет приложениям получать доступ к функциям, предоставляемым оболочкой операционной системы , а также изменять и улучшать ее. Компонент находится воболочка.dllв 16-битной Windows иShell32.dllв 32-битной Windows. Упрощенные служебные функции Shell находятся в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 определен на языке программирования C. [12] Его функции и структуры данных определены в синтаксисе C (см. windows.h ). Однако API можно использовать с помощью любого языка программирования, который может взаимодействовать со структурами данных API и соглашениями о вызовах для вызовов функций и обратных вызовов .

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

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

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

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

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

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

Многие технологии 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 часто пишет простое «привет, мир» в качестве своего первого задания. Рабочая часть программы — это всего лишь одна строка 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». [16]

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

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

Одним из крупнейших изменений в Windows API стал переход с Win16 (поставлявшегося в Windows 3.1 и более ранних версиях) на Win32 (Windows NT и Windows 95 и более поздних версий). Хотя Win32 изначально был представлен в Windows NT 3.1, а Win32 позволяла использовать подмножество 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-битных приложений. [21]

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

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

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

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

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

Проект 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 (см. Список платформо-независимых библиотек графического интерфейса ).

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

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

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

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

Для языка C++ компании Zortech (позже Symantec , затем Digital Mars ), Watcom и Borland выпустили хорошо известные коммерческие компиляторы, которые часто использовались с Win16, Win32 и Win32. Некоторые из них поставляли расширители памяти , позволяющие программам Win32 запускаться на Win16 с помощью распространяемой Microsoft Win32s DLL. Компилятор 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, поддерживаемый 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.

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

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

Примечания

  1. ^ И Паскаль , и ассемблер 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, 64-разрядную версию Windows XP. Edition , Windows Advanced Server 2003 для Itanium и Windows 2008 Advanced Server для Itanium на платформе IA-64 .

Рекомендации

  1. ^ ab Сеть разработчиков Microsoft (июль 2005 г.). Обзор API Windows. Проверено 28 августа 2005 г.
  2. ^ Сеть разработчиков Microsoft (июль 2005 г.). Базовые услуги. Проверено 28 августа 2005 г.
  3. ^ Сеть разработчиков Microsoft (июль 2005 г.). Интерфейс графического устройства. Проверено 28 августа 2005 г.
  4. ^ "Г". Сеть разработчиков Microsoft . Проверено 28 января 2009 г.
  5. ^ Сеть разработчиков Microsoft (июль 2005 г.). Пользовательский интерфейс. Проверено 28 августа 2005 г.
  6. ^ Сеть разработчиков Microsoft (2005). Библиотека общих диалоговых окон. Проверено 22 сентября 2005 г.
  7. ^ Сеть разработчиков Microsoft (июль 2005 г.). Общая библиотека управления. Проверено 28 августа 2005 г.
  8. ^ Сеть разработчиков Microsoft (июль 2005 г.). Оболочка Windows. Проверено 28 августа 2005 г.
  9. ^ Сеть разработчиков Microsoft (2005). Руководство программиста Shell. Проверено 28 августа 2005 г.
  10. ^ Сеть разработчиков Microsoft (июль 2005 г.). Сетевые службы. Проверено 28 августа 2005 г.
  11. ^ Сеть разработчиков Microsoft (январь 2006 г.); Программирование и повторное использование браузера. Проверено 22 января 2006 г.
  12. ^ «Пошаговое руководство: создание традиционного приложения для рабочего стола Windows (C++)» . Документы Майкрософт . 23 февраля 2022 г.
  13. ^ аб Мэйберри, Майкл (2012). Обнародован WinRT . Нью-Йорк: Апресс. п. 3. ISBN 978-1-4302-4585-8.
  14. ^ Тексейра, Стив и Ксавье Пачеко (2002). Руководство разработчика Borland Delphi 6. Сэмс. п. 253. ИСБН 0672321157.
  15. ^ Руссинович, Марк (ноябрь 2006 г.). «Внутри собственных приложений». Документы Майкрософт . Проверено 12 апреля 2022 г.
  16. ^ Чарльз Петцольд (декабрь 2001 г.). Программирование Microsoft Windows на C# . Майкрософт Пресс. За консолью, стр. 47.
  17. ^ Подробный анализ изменений в Windows API от XP до 10. Проверено 8 сентября 2016 г.
  18. Чарльз Петцольд (11 ноября 1998 г.). Программирование для Windows, пятое издание . Майкрософт Пресс. API и модели памяти, стр. 9.
  19. Смит, Грэм (8 октября 2022 г.). «В Windows 95 был специальный код, предназначенный только для исправления ошибки в оригинальном SimCity». Камень, Бумага, Дробовик .
  20. Раймонд Чен (15 октября 2003 г.). А как насчет BOZOSLIVEHERE и TABHETEXTOUTFORWIMPS? Проверено 29 июня 2022 г.
  21. ^ Хоффман, Крис. «В чем разница между папками «System32» и «SysWOW64» в Windows?». Как компьютерщик . Проверено 11 апреля 2023 г.
  22. ^ Проект Исеран (1996–2001). История Windows API. Проверено 7 октября 2005 г.
  23. ^ «Домашняя страница Windows XP Professional x64 Edition» . Майкрософт.
  24. ^ «Обзор 64-битных вычислений Microsoft» . Майкрософт.
  25. ^ «MSDN: подготовка к 64-битной версии Windows» . Майкрософт.
  26. ^ WISE. Архивировано 30 марта 2008 г. в Wayback Machine.

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