Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Toto téma vysvětluje, jak sdílet pojmenované objekty mezi aplikacemi univerzální platformy Windows (UPW) a aplikacemi Win32.
Pojmenované objekty v zabalených aplikacích
Pojmenované objekty poskytují snadný způsob, jak procesy sdílet popisovače objektů. Jakmile byl vytvořen pojmenovaný objekt, mohou ostatní procesy využít jeho název ke spuštění příslušné funkce pro otevření popisovače tohoto objektu. Pojmenované objekty se běžně používají pro synchronizaci vláken a komunikaci mezi procesy.
Ve výchozím nastavení mohou zabalené aplikace přistupovat pouze k pojmenovaným objektům, které vytvořily. Aby bylo možné sdílet pojmenované objekty s zabalenými aplikacemi, musí být oprávnění nastavena při vytváření objektů a názvy musí být při otevření objektů kvalifikované.
Vytváření pojmenovaných objektů
Pojmenované objekty se vytvoří s odpovídajícím Create rozhraním API:
- Událost vytvoření
- VytvořitMapováníSouboru
- Nástroj CreateMutex
- Vytvořit semafor
- CreateWaitableTimer
Všechna tato rozhraní API sdílejí LPSECURITY_ATTRIBUTES parametr, který volajícímu umožňuje určit seznamy řízení přístupu (ACL) k řízení toho, jaké procesy mají přístup k objektu. Aby bylo možné sdílet pojmenované objekty s zabalenými aplikacemi, musí být oprávnění udělena v rámci seznamů ACL při vytváření pojmenovaných objektů.
Identifikátory zabezpečení (SID) představují identity v rámci seznamů ACL. Každá zabalená aplikace má svůj vlastní identifikátor SID založený na názvu své rodiny balíčků. Identifikátor SID pro zabalenou aplikaci můžete vygenerovat předáním jejího názvu rodiny balíčků do DeriveAppContainerSidFromAppContainerName.
Poznámka:
Název rodiny balíčků najdete v editoru manifestu balíčku v sadě Visual Studio během vývoje, prostřednictvím Partnerského centra pro aplikace publikované v Microsoft Storu nebo pomocí příkazu Get-AppxPackage PowerShellu pro aplikace, které jsou už nainstalované.
Tato ukázka demonstruje základní vzor potřebný pro nastavení seznamu řízení přístupu (ACL) pro pojmenovaný objekt. Pokud chcete sdílet pojmenované objekty s zabalenými aplikacemi, vytvořte pro každou aplikaci strukturu EXPLICIT_ACCESS :
grfAccessMode = GRANT_ACCESS-
grfAccessPermissions =odpovídající oprávnění na základě objektu a zamýšleného použití grfInheritance = NO_INHERITANCETrustee.TrusteeForm = TRUSTEE_IS_SIDTrustee.TrusteeType = TRUSTEE_IS_USER-
Trustee.ptstrName =identifikátor SID získaný z DeriveAppContainerSidFromAppContainerName
Naplněním parametru LPSECURITY_ATTRIBUTES ve Create volání pravidly EXPLICIT_ACCESS pro zabalené aplikace můžete těmto aplikacím udělit přístup k otevření pojmenovaného objektu.
Poznámka:
Aplikace Win32 mají přístup ke všem pojmenovaným objektům vytvořeným zabalenými aplikacemi, pokud při jejich otevírání upřesní názvy objektů. Nemusí mít udělený přístup.
Otevření pojmenovaných objektů
Pojmenované objekty se otevírají předáním názvu odpovídajícímu Open rozhraní API:
- Událost OpenEvent
- OpenFileMapping
- OpenMutex
- OtevřítSemafor
- Otevřít ČasovačČekatelný
Pojmenované objekty vytvořené zabalenou aplikací se vytvoří v rámci oboru názvů aplikace, jinak označované jako pojmenovaná cesta k objektu. Při otevírání pojmenovaných objektů vytvořených zabalenou aplikací musí být názvy objektů opatřeny předponou s pojmenovanou cestou k objektu vytvořenou aplikací.
GetAppContainerNamedObjectPath vrátí pojmenovanou cestu objektu pro zabalenou aplikaci na základě jeho identifikátoru SID. Identifikátor SID pro zabalenou aplikaci můžete vygenerovat předáním jejího názvu rodiny balíčků do DeriveAppContainerSidFromAppContainerName.
Poznámka:
Název rodiny balíčků najdete v editoru manifestu balíčku v sadě Visual Studio během vývoje, prostřednictvím Partnerského centra pro aplikace publikované v Microsoft Storu nebo pomocí příkazu Get-AppxPackage PowerShellu pro aplikace, které jsou už nainstalované.
Při otevírání pojmenovaných objektů vytvořených zabalenou aplikací použijte formát <PATH>\<NAME>:
- Nahraďte
<PATH>pojmenovanou cestou objektu aplikačního programu, který ji vytváří. - Nahraďte
<NAME>názvem objektu.
Poznámka:
Názvy objektů s předponou <PATH> se vyžadují pouze v případě, že zabalená aplikace objekt vytvořila. Pojmenované objekty vytvořené aplikacemi Win32 nemusí být kvalifikované, i když při vytváření objektů musí být udělen přístup.
Poznámky
Pojmenované objekty v zabalených aplikacích jsou ve výchozím nastavení izolované, aby se zachovalo zabezpečení a zajistilo podporu událostí životního cyklu aplikace, jako je pozastavení a ukončení. Sdílení pojmenovaných objektů napříč aplikacemi zavádí úzká omezení vazby a správy verzí a vyžaduje, aby každá aplikace byla odolná vůči životnímu cyklu ostatních. Z těchto důvodů se doporučuje sdílet pouze pojmenované objekty mezi aplikacemi od stejného vydavatele.