Windows API

Z Multimediaexpo.cz

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ému Microsoft Windows typu mikrokernel, 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.

Obsah

Komponenty Windows API

Funkčnost Windows API lze rozdělit do 8 kategorií[1]:

Základní služby[2]
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)[3]
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 a na 32bitových Windows v gdi32.dll.
Uživatelské Rozhraní[4]
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 32bitových Windows v user32.dll. Od Windows XP se základní prvky nachází v comctl32.dll, společně s bežnými prvky (Common Control Library).
Knihovna běžných dialogových oken[5]
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 a na 32bitových Windows v comdlg32.dll. Celkově také patří do kategorie Uživatelské Rozhraní.
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 Windows v comctl32.dll. Celkově také patří do kategorie Uživatelské Rozhraní.
Windows Shell[7][8]
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 a na 32bitových Windows v shlwapi.dll. Celkově také patří do kategorie Uživatelské Rozhraní.
Síťové služby[9]
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.[10]:

  • 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 pro multimédia a hry:

  • 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 její další využívání pro vývoj her.
  • DirectShow pro podporu multimédií, avšak Microsoft nedoporučuje její další využívání pro vývoj her. Je srovnatelný s frameworkem GStreamer.
  • DirectMusic

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[11], 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[12].

Win16
Win16 je API pro první 16bitové verze Microsoft Windows. Původně byla nazývána Windows API, avšak byla později 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“ je anglicky 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 byla podmnožina rozhraní Win32 určená pro Windows 3.1x (písmeno „s“ je anglicky 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[13], který umožňuje ostatním dodavatelům emulovat Windows pomocí poskytnutí identického API bez porušení autorských práv.

Wine
Wine je pokus o poskytnutí Win32 API vrstvy pro unixové platformy.
ReactOS
ReactOS je volně šiřitelný operační systém, který spolupracuje s projektem Wine. Implementuje celý operační systém včetně kompatibility s ovladači zařízení.
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 pro emulace Win32 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í call, 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

  1. Microsoft Developer Network (červenec 2005). Přehled Windows API. získaný 28. srpna 2005
  2. Microsoft Developer Network (červenec 2005). Základní Servis. získaný 28. srpna 2005
  3. Microsoft Developer Network (červenec 2005). Graphics Device Interface. získaný 28. srpna 2005
  4. Microsoft Developer Network (červenec 2005). User Interface. získaný 28. srpna 2005
  5. Microsoft Developer Network (2005). Common Dialog Box Library. získaný 22. září 2005
  6. Microsoft Developer Network (červenec 2005). Common Control Library. získán 28. srpna 2005
  7. Microsoft Developer Network (červenec 2005). Windows Shell. získáno 28. srpna 2005.
  8. Microsoft Developer Network (2005). Nadstavba (Shell) Příručka Programátora. získaný 28. srpna 2005
  9. Microsoft Developer Network (červenec 2005). Síťové služby. získáno v 28. srpna 2005
  10. Microsoft Developer Network (January 2006); Programming and reusing the browser získáno 22. ledna 2006.
  11. The Iseran Project (1996-2001). History of the Windows API. získáno 7. října, 2005.
  12. Microsoft Developer Network (July 2005). Overview of the Windows API. Retrieved August 28, 2005.
  13. http://www.eetimes.com/news/design/showArticle.jhtml?articleID=201801579