Sdílet prostřednictvím


Sady rozhraní API systému Windows

Důležitý

Informace v tomto tématu platí pro všechny verze Windows 10 a novější. Na tyto verze se zde budeme odkazovat jako na "Windows", kde je to potřeba, vyvoláme případné výjimky.

Všechny verze Windows sdílejí společnou základnu součástí operačního systému (OS), které se nazývají základní operační systém (v některých kontextech se tato společná základna označuje také jako onecore). V základních komponentách operačního systému jsou rozhraní API Win32 uspořádaná do funkčních skupin, které se nazývají sady rozhraní API .

Účelem sady rozhraní API je poskytnout oddělení architektury od knihovny DLL hostitele, ve které je implementované dané rozhraní API Win32, a funkční kontrakt, do kterého rozhraní API patří. Oddělení, které rozhraní API nastavuje mezi implementací a kontrakty, nabízí vývojářům mnoho technických výhod. Konkrétně použití sad rozhraní API ve vašem kódu může zlepšit kompatibilitu se zařízeními s Windows.

Sady rozhraní API konkrétně řeší následující scénáře:

  • I když je na počítačích podporována úplná šířka rozhraní API Win32, na jiných zařízeních s Windows, jako jsou HoloLens, Xbox a další zařízení, je dostupná jenom podmnožina rozhraní API Win32. Název sady rozhraní API poskytuje mechanismus dotazu, který vyčistí, jestli je rozhraní API dostupné na libovolném zařízení.

  • Některé implementace rozhraní API Win32 existují v knihovnách DLL s různými názvy na různých zařízeních s Windows. Použití názvů sady rozhraní API místo názvů DLL při zjišťování dostupnosti rozhraní API a zpoždění načítání rozhraní API poskytuje správnou trasu k implementaci bez ohledu na to, kde je rozhraní API skutečně implementováno.

Další podrobnosti najdete v tématu Operace zavaděče sady rozhraní API a Zjistit dostupnost sady rozhraní API.

Jsou sady rozhraní API a knihovny DLL stejné?

Ne – název sady rozhraní API je virtuální alias fyzického souboru .dll. Jedná se o techniku skrývání implementace, kdy jako volající nemusí přesně vědět, který modul je hostitelem informací.

Tato technika umožňuje refaktoring modulů (rozdělit, konsolidovat, přejmenovat atd.) v různých verzích a edicích Windows. A vaše aplikace stále propojují a stále se směrují na správný kód za běhu.

Proč tedy sady rozhraní API mají ve svých názvech .dll? Důvodem je způsob implementace zavaděče knihovny DLL . Zavaděč je součástí operačního systému, který načítá knihovny DLL nebo řeší odkazy na knihovny DLL. A na front-endu zavaděč vyžaduje, aby byl jakýkoli řetězec předán LoadLibrary ukončen s ".dll". Po uplynutí tohoto front-endu ale zavaděč může tuto příponu odstranit a dotazovat se na databázi sady rozhraní API s výsledným řetězcem.

loadLibrary (a zpoždění načtení) proběhne úspěšně s názvem sady rozhraní API (s ".dll" v ní); ale nemusí nutně existovat skutečný soubor s tímto názvem kdekoli na počítači.

Propojení zastřešujících knihoven

Abychom usnadnili omezení kódu na rozhraní API Win32 podporovaná v základním operačním systému, poskytujeme řadu zastřešujících knihoven. Například zastřešující knihovna s názvem OneCore.lib poskytuje exporty pro podmnožinu rozhraní API Win32, která jsou společná pro všechna zařízení s Windows.

Další podrobnosti najdete v tématu windows zastřešující knihovny .

Názvy kontraktů sady rozhraní API

Sady rozhraní API jsou identifikovány silným názvem kontraktu, který dodržuje tyto standardní konvence rozpoznané zavaděčem knihovny.

  • Název musí začínat řetězcem api- nebo ext-.
    • Názvy začínající api – představují rozhraní API, která existují ve všech edicích Windows, které splňují požadavky na verzi rozhraní API.
    • Názvy začínající ext- představují rozhraní API, která nemusí existovat ve všech edicích Windows.
  • Název musí končit posloupností l<n>-<n>-<n>, kde n se skládá z desítkových číslic.
  • Text názvu může být alfanumerické znaky nebo pomlčky (-).
  • Název nerozlišuje malá a velká písmena.

Tady je několik příkladů názvů kontraktů sady rozhraní API:

  • api-ms-win-core-ums-l1-1-0
  • ext-ms-win-com-ole32-l1-1-5
  • ext-ms-win-ntuser-window-l1-1-0
  • ext-ms-win-ntuser-window-l1-1-1

Název sady rozhraní API můžete použít v kontextu operace zavaděče, jako je LoadLibrary nebo P/Invoke místo názvu modulu KNIHOVNY DLL, abyste zajistili správnou trasu k implementaci bez ohledu na to, kde je rozhraní API skutečně implementováno na aktuálním zařízení. Když to ale uděláte, musíte připojit řetězec .dll na konec názvu kontraktu. Jedná se o požadavek na správné fungování zavaděče a není považován za součást názvu kontraktu. I když se názvy kontraktů v tomto kontextu podobají názvům knihoven DLL, liší se od názvů modulů DLL a přímo neodkazují na soubor na disku.

S výjimkou připojení řetězce .dll v operacích zavaděče by se názvy kontraktů sady rozhraní API měly považovat za neměnný identifikátor, který odpovídá konkrétní verzi kontraktu.

Identifikace sad rozhraní API pro rozhraní API Win32

Pokud chcete zjistit, jestli konkrétní rozhraní API Win32 patří do sady rozhraní API, projděte si tabulku požadavků v referenční dokumentaci k rozhraní API. Pokud rozhraní API patří do sady rozhraní API, uvádí tabulka požadavků v článku název sady rozhraní API a verzi Windows, ve které bylo rozhraní API poprvé zavedeno do sady rozhraní API. Příklady rozhraní API, která patří do sady rozhraní API, najdete v těchto článcích:

V této části