Windows API
Windows API (neformálně WinAPI) je API vyvinuté firmou Microsoft pro operační systém Microsoft Windows. Všechny programy v Microsoft Windows musí nezávisle na použitém programovacím jazyce komunikovat prostřednictvím Windows API, které obsahuje nejen základní funkce, ale i funkce pro vytváření uživatelského rozhraní a další.
Protože je jádro systémů Microsoft Windows NT hybridní, používá se v programech výhradně meziprocesová komunikace. Programy nemají k jádru přístup pomocí systémových volání, jako je to obvyklé v unixových systémech s jádrem monolitického typu.
Nízkoúrovňový přístup k systému Windows, nutný především pro ovladače zařízení, je v současné verzi Windows poskytován systémem Windows Driver Foundation nebo Native API.
Komponenty Windows API
Funkčnost Windows API lze rozdělit do 8 kategorií:[1]
- Základní služby
- Poskytuje přístup k nezbytným zdrojům poskytnutým systémem Windows. Zahrnuje věci jako souborový systém, periferie, procesy a vlákna, přístup do registrů Windows a ošetření chyb. Tyto funkce jsou na 16bitových Windows v souborech kernel.exe, krnl286.exe nebo krnl386.exe a na 32bitových Windows v kernel32.dll a advapi32.dll.
- Pokročilé služby
- Zahrnují API pro práci s registrem Windows, vypnutí/restart systému (nebo jeho zrušení), spuštění/zastavení/vytvoření služeb systému Windows a správu uživatelských účtů. Tyto funkce jsou ve 32bitových Windows implementovány v advapi32.dll.
- Graphics Device Interface (GDI)[2]
- Poskytuje funkce pro výstup grafického obsahu na monitory, tiskárny a jiná výstupní zařízení. Na 16bitových Windows uloženo v gdi.exe, na těch 32bitových Windows v gdi32.dll.
- Uživatelské rozhraní[3]
- Poskytuje funkce pro tvorbu a řízení počítačových oken a dalších základních prvků jako jsou tlačítka a posuvníky, zpracovává vstup z klávesnice a myši a jiných funkcí spojených s GUI. Tato funkční jednotka se na 16bitových Windows nachází v user.exe a na těch 32bitových v user32.dll. Od Windows XP se základní prvky nachází v comctl32.dll, společně s běžnými prvky (Common Control Library).
- Knihovna běžných dialogových oken[4]
- Poskytuje aplikacím standardní dialogová okna pro otevření a ukládání souborů, volbu barvy a fontů, apod. Knihovna je na 16bitových Windows uložena v souboru commdlg.dll, kdežto na 32bitových v comdlg32.dll. Celkově také patří do kategorie Uživatelské rozhraní.[5]
- Knihovna běžných prvků (Common Control Library)[6]
- Poskytuje aplikaci přístup k pokročilejším prvkům operačního systému. Zahrnuje věci jako stavový řádek, zobrazení průběhu výpočtu, toolbary a záložky. Knihovna je na 16bitových Windows umístěna v commctrl.dll a na 32bitových v comctl32.dll. Celkově také patří do kategorie Uživatelské rozhraní.
- Windows Shell[7]
- Umožňuje aplikacím přístup k funkcím poskytovaných shellem Windows. Komponenta je na 16bitových Windows v shell.dll, později ve Windows 95 v shell32.dll, na 32bitových pak v shlwapi.dll. Celkově také patří do kategorie Uživatelské rozhraní.
- Síťové služby[8]
- Poskytuje přístup k různým počítačovým sítím. Zahrnuje také NetBIOS, Winsock, NetDDE, RPC a mnoho dalších funkcí.
Web
Webový prohlížeč Windows Internet Explorer poskytuje mnoho API funkcí, které lze považovat za součást Windows API. Internet Explorer je součástí operačních systémů firmy Microsoft od Windows 95 a poskytuje doplňující webové funkce od Windows 98:
- možnost využití prohlížeče v jiné aplikaci (shdocvw.dll) a využití renderovacího jádra Trident
- servis URL v urlmon.dll, který poskytuje COM objekt aplikacím pro analýzu URL. Aplikace mohou též poskytovat vlastní URL odkazy ostatním.
- podpora pro vícejazyčné a mezinárodní texty (mlang.dll)
- DirectX transformace (sada filtrů pro zpracování obrázků)
- podpora XML (MSXML komponenty)
- přístup k adresáři (Windows Address Book)
Multimédia
Microsoft poskytuje DirectX API jako součást systému od Windows 95 OSR2. DirectX poskytuje podporu, a to nejen pro multimédia a hry:
- Direct2D pro vykreslování (rendering) 2D grafiky, bitmap a textu.[9] Zachovávajíc plnou interoperabilitu s GDI/GDI+ i Direct3D, přináší vyšší vizuální kvalitu a hardwarově akcelerované vykreslování.
- DirectWrite pro vykreslování rozvržených textů a glyfů.
- Direct3D jako alternativu k OpenGL pro přístup k 3D hardwarové akceleraci
- DirectDraw pro hardwarově akcelerovaný přístup k 2D framebufferu. Od DirectX 9 je tato komponenta nahrazena Direct3D, které poskytuje obecnější výkonné funkce (2D renderování je podmnožina 3D).
- DirectSound pro nízkoúrovňový přístup ke zvukovým kartám s hardwarovou akcelerací
- DirectInput pro komunikaci se vstupními zařízeními jako jsou joysticky a gamepady.
- DirectPlay pro infrastrukturu her s více hráči. Tato komponenta byla odstraněna v DirectX 9 a Microsoft nedoporučuje jeho další využívání pro vývoj her.
- DirectShow pro podporu multimédií, avšak Microsoft nedoporučuje jeho další využívání pro vývoj her. Je srovnatelný s frameworkem GStreamer.
- DirectMusic pro skládání a přehrávání zvukových efektů a hudby. V současnosti se od něj ustupuje.
Interakce s programy
Windows API slouží zejména pro komunikaci programů s operačním systémem. Pro komunikaci programů mezi sebou vyvinul Microsoft sérii technologií, která začala Dynamic Data Exchange (DDE), které bylo nahrazeno Object Linking and Embedding (OLE) a později ještě Component Object Model (COM).
Nadstavbové knihovny
Microsoft vyvinul různé nadstavbové knihovny, které umožňují aplikacím pracovat s nízkoúrovňovými Windows API funkcemi abstraktnějším způsobem. Microsoft Foundation Class Library (MFC) je nadstavba Windows API pro třídy v C++, která usnadňuje objektově orientované programování při využívání Windows API. Active Template Library (ATL) je šablonově orientovaná nadstavba pro COM. Windows Template Library (WTL) byla vyvinuta jako rozšíření pro ATL a zamýšlena jako odlehčená alternativa k MFC.
Další nadstavby vyvinula firma Borland: Object Windows Library (OWL) byla vydána jako konkurence k MFC a poskytuje podobnou objektově orientovanou nadstavbu. Nahradila ji Visual Component Library (VCL), která je napsána v Object Pascalu a dostupná jak pro Delphi, tak pro C++Builder.
Většina aplikačních frameworků pro Windows je (alespoň částečně) nadstavbou nad Windows API. Proto také .NET Framework a Java stejně jako ostatní programovací jazyky pod Windows jsou (nebo obsahují) nadstavbové knihovny.
Verze
Téměř všechny nové verze Microsoft Windows přinášejí rozšíření nebo změny Windows API, avšak název API se s verzemi Microsoft Windows nemění kromě změny z Win32 na Windows API, které nyní zahrnuje všechny starší i všechny budoucí verze.[10]
- Win16
- Win16 je API pro první 16bitové verze Microsoft Windows. Původně byla nazývána Windows API, avšak byla později byla retronymicky přejmenována na Win16 kvůli odlišení od nové 32bitové verze Windows API. Funkce Win16 API jsou obsaženy zejména v základních souborech OS: kernel.exe (nebo krnl286.exe nebo krnl386.exe), user.exe a gdi.exe. I přes příponu .exe se jedná o dynamické knihovny.
- Win32
- Win32 je 32bitové API pro novou řadu Windows NT. Funkce jsou stejně jako u Win16 implementovány v základních systémových DLL kernel32.dll, user32.dll a gdi32.dll. Ve Windows 95 se původně hovořilo o Win32c (písmeno „c“ z anglického compatibility), avšak název byl posléze firmou Microsoft opuštěn. Od verze Windows NT 4.0 jsou Win32 volání vykonávány v uživatelském režimu modulem csrss.exe (Client/Server Runtime Server Subsystem) a v jaderném režimu modulem win32k.sys.
- Win32s
- Win32s je podmnožina rozhraní Win32 určená pro Windows 3.1x (písmeno „s“ z angl. subset)
- Win32 pro 64bitové Windows
- Win32 pro 64bitové Windows (dříve označované Win64) je API pro 64bitové verze (Windows XP Professional x64 Edition, 64bitové verze Windows Server 2003 a verze pro Itanium a jejich následovníci). Všechny 64bitové verze jsou totožnou platformou s Windows NT, takže lze po kontrole typů adresových ukazatelů (a jejich aritmetiky) použít 32bitové zdrojové kódy (64bitová verze API nepřináší žádné další specifické funkce).
Další implementace
Přestože je implementace Windows API chráněna autorským právem (copyright), je všeobecně respektován precedent,[11] který umožňuje ostatním dodavatelům emulovat Windows pomocí poskytnutí identického API bez porušení autorských práv.
- Wine
- Wine je free a open-source softwarová vrstva poskytující Win32 API pro unixové platformy umožňující běh Win32 aplikací.
- ReactOS
- ReactOS je volně šiřitelný operační systém, který si klade za cíl binární kompatibilitu s programy a ovladači zařízení vytvořenými pro řadu Windows NT.
- HX DOS Extender
- HX DOS Extender je emulace WIndows API pro běh jednoduchých Windows programů na příkazovém řádku systému DOS.
- Odin
- Odin je projekt umožňující běh Win32 aplikací v OS/2. Též usnadňuje portování Win32 aplikací na OS/2 tak, že poskytuje vlastní Odin32 API, což je implementace Win32 API v OS/2.
Volání API funkcí
Ve Windows je několik desítek knihoven (kernel32.dll, user32.dll, imagehlp.dll, …), které na zavolání vykonají funkce API. Jsou to celky, na které je možné v různých programech, tzv. „debuggerech“, nastavovat breakpointy (zarážky). Toho využívají například crackeři.
V Assembleru probíhá volání API funkcí Windows instrukcí tcall, před ní pomocí instrukce push musí proběhnout uložení hodnot. V některých assemblerech (MASM) je možné je volat pomocí maker, např.:
invoke MessageBox, NULL, offset text, offset titulek, MB_OK
Reference
- Microsoft Developer Network (červenec 2005). Přehled programování Windows API
- Microsoft Developer Network (červenec 2005). Windows GDI
- Microsoft Developer Network (červenec 2005). User Interface
- Microsoft Developer Network (2005). Common Dialog Box Library
- RAMEL, David. Microsoft Opens Up Old Win32 APIs to C# and Rust, More Languages to Come [online]. Visual Studio Magazine, 2021-01-21 [cit. 2021-01-31]. Dostupné online. (anglicky)
- Microsoft Developer Network (červenec 2005). Control Library
- Microsoft Developer Network (červenec 2005). Windows Shell
- Microsoft Developer Network (červenec 2005). Přehled služby Síťové zásady a přístup
- Microsoft Developer Network Direct2D (Windows)
- Microsoft Developer Network (July 2005). Overview of the Windows API
- Ruling for Green Hills clears way for copying of APIs