Delen via


Benoemde objecten delen

In dit onderwerp wordt uitgelegd hoe u benoemde objecten kunt delen tussen UWP-toepassingen (Universal Windows Platform) en Win32-toepassingen.

Benoemde objecten in verpakte toepassingen

Benoemde objecten bieden een eenvoudige manier voor processen om objectgrepen te delen. Nadat een proces een benoemd object heeft gemaakt, kunnen andere processen de naam gebruiken om de juiste functie aan te roepen om een ingang voor het object te openen. Benoemde objecten worden vaak gebruikt voor threadsynchronisatie en communicatie tussen processen.

Standaard hebben verpakte toepassingen alleen toegang tot benoemde objecten die ze hebben gemaakt. Als u benoemde objecten wilt delen met verpakte toepassingen, moeten machtigingen worden ingesteld wanneer objecten worden gemaakt en moeten namen worden gekwalificeerd wanneer objecten worden geopend.

Benoemde objecten maken

Benoemde objecten worden gemaakt met een bijbehorende Create-API:

Al deze API's delen een LPSECURITY_ATTRIBUTES parameter waarmee de aanroeper toegangsbeheerlijsten (ACL's) kan opgeven om te bepalen welke processen toegang hebben tot het object. Als u benoemde objecten wilt delen met verpakte toepassingen, moet de machtiging worden verleend binnen de ACL's wanneer de benoemde objecten worden gemaakt.

Beveiligings-id's (SID's) vertegenwoordigen identiteiten binnen ACL's. Elke verpakte toepassing heeft een eigen SID op basis van de familienaam van het pakket. U kunt de SID genereren voor een verpakte toepassing door de familienaam van het pakket door te geven aan DeriveAppContainerSidFromAppContainerName.

Opmerking

De familienaam van het pakket vindt u via de manifesteditor van het pakket in Visual Studio tijdens de ontwikkeling, via Partnercentrum voor toepassingen die zijn gepubliceerd via de Microsoft Store of via de Get-AppxPackage PowerShell-opdracht voor toepassingen die al zijn geïnstalleerd.

Dit voorbeeld laat het basispatroon zien dat nodig is om een ACL toe te passen op een benoemd object. Als u benoemde objecten wilt delen met verpakte toepassingen, bouwt u een EXPLICIT_ACCESS structuur voor elke toepassing:

Door de parameter LPSECURITY_ATTRIBUTES in Create aanroepen te vullen met EXPLICIT_ACCESS regels voor verpakte toepassingen, kunt u toegang verlenen tot deze toepassingen om het benoemde object te openen.

Opmerking

Win32-toepassingen hebben toegang tot alle benoemde objecten die zijn gemaakt door verpakte toepassingen zolang ze de objectnamen kwalificeren wanneer ze openen. Ze hoeven geen toegang te krijgen.

Objecten met naam openen

Benoemde objecten worden geopend door een naam door te geven aan een bijbehorende Open-API:

Benoemde objecten die zijn gemaakt door een verpakte toepassing, worden gemaakt in de naamruimte van de toepassing, ook wel het benoemde objectpad genoemd. Wanneer u benoemde objecten opent die zijn gemaakt door een verpakte toepassing, moeten de objectnamen worden voorafgegaan door het benoemde objectpad waarmee de toepassing is gemaakt.

GetAppContainerNamedObjectPath- retourneert het benoemde objectpad voor een verpakte toepassing op basis van de BIJBEHORENDE SID. U kunt de SID genereren voor een verpakte toepassing door de familienaam van het pakket door te geven aan DeriveAppContainerSidFromAppContainerName.

Opmerking

De familienaam van het pakket vindt u via de manifesteditor van het pakket in Visual Studio tijdens de ontwikkeling, via Partnercentrum voor toepassingen die zijn gepubliceerd via de Microsoft Store of via de Get-AppxPackage PowerShell-opdracht voor toepassingen die al zijn geïnstalleerd.

Wanneer u benoemde objecten opent die zijn gemaakt door een verpakte toepassing, gebruikt u de indeling <PATH>\<NAME>:

  • Vervang <PATH> door het benoemde objectpad van de applicatie die het maakt.
  • Vervang <NAME> door de objectnaam.

Opmerking

Het voorvoegsel van objectnamen met <PATH> is alleen vereist als een verpakte toepassing het object heeft gemaakt. Benoemde objecten die zijn gemaakt door Win32-toepassingen hoeven niet te worden gekwalificeerd, maar toegang moet nog steeds worden verleend wanneer de objecten worden gemaakt.

Opmerkingen

Benoemde objecten in verpakte toepassingen worden standaard geïsoleerd om de beveiliging te behouden en ervoor te zorgen dat ondersteuning wordt geboden voor levenscyclusgebeurtenissen van toepassingen, zoals opschorten en beëindigen. Het delen van benoemde objecten in toepassingen introduceert strikte bindings- en versiebeheerbeperkingen en vereist dat elke toepassing bestand is tegen de levenscyclus van anderen. Daarom is het raadzaam om alleen benoemde objecten te delen tussen toepassingen van dezelfde uitgever.