Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Thema wird erläutert, wie benannte Objekte zwischen Universal Windows Platform (UWP)-Anwendungen und Win32-Anwendungen geteilt werden.
Benannte Objekte in verpackten Anwendungen
Benannte Objekte bieten eine einfache Möglichkeit für Prozesse, Objekthandles zu teilen. Nachdem ein Prozess ein benanntes Objekt erstellt hat, können andere Prozesse den Namen verwenden, um die entsprechende Funktion aufzurufen, um ein Handle für das Objekt zu öffnen. Benannte Objekte werden häufig für Threadsynchronisierung und interprozessuale Kommunikationverwendet.
Standardmäßig können verpackte Anwendungen nur auf benannte Objekte zugreifen, die sie erstellt haben. Um benannte Objekte mit gepackten Anwendungen zu teilen, müssen Berechtigungen beim Erstellen von Objekten festgelegt werden, und die Namen müssen beim Öffnen von Objekten qualifiziert werden.
Benannte Objekte erstellen
Benannte Objekte werden mit einer entsprechenden Create-API erstellt:
Alle diese APIs verwenden einen LPSECURITY_ATTRIBUTES-Parameter, mit dem der Aufrufer Zugriffssteuerungslisten (ACCESS Control Lists, ACLs) angeben kann,, um zu steuern, welche Prozesse auf das Objekt zugreifen können. Um benannte Objekte für verpackte Anwendungen freizugeben, muss die Berechtigung innerhalb der ACLs erteilt werden, wenn die benannten Objekte erstellt werden.
Sicherheits-IDs (SIDs) stellen Identitäten innerhalb von ACLs dar. Jede verpackte Anwendung verfügt über eine eigene SID basierend auf dem Paketfamiliennamen. Sie können die SID für eine verpackte Anwendung generieren, indem Sie den Paketfamiliennamen an DeriveAppContainerSidFromAppContainerNameübergeben.
Hinweis
Der Paketfamilienname kann während der Entwicklungsphase über den Paketmanifest-Editor in Visual Studio ermittelt werden, über das Partner Center für Anwendungen, die über den Microsoft Store veröffentlicht wurden, oder über den PowerShell-Befehl Get-AppxPackage für bereits installierte Anwendungen.
In diesem Beispiel wird das grundlegende Verfahren zur Verwaltung einer Zugriffskontrollliste (ACL) für ein benanntes Objekt veranschaulicht. Wenn Sie benannte Objekte für verpackte Anwendungen freigeben möchten, erstellen Sie eine EXPLICIT_ACCESS Struktur für jede Anwendung:
grfAccessMode = GRANT_ACCESS-
grfAccessPermissions =die entsprechenden Berechtigungen basierend auf dem Objekt und der vorgesehenen Nutzung grfInheritance = NO_INHERITANCETrustee.TrusteeForm = TRUSTEE_IS_SIDTrustee.TrusteeType = TRUSTEE_IS_USER-
Trustee.ptstrName =die SID, die von DeriveAppContainerSidFromAppContainerName
Indem Sie den LPSECURITY_ATTRIBUTES-Parameter in Create-Aufrufen anhand EXPLICIT_ACCESS-Regeln für gepackte Anwendungen auffüllen, können Sie Zugriff auf diese Anwendungen gewähren, damit die benannten Objekte geöffnet werden können.
Hinweis
Win32-Anwendungen können auf alle benannten Objekte zugreifen, die von verpackten Anwendungen erstellt wurden, solange sie die Objektnamen qualifizieren, wenn sieöffnen. Es muss ihnen kein Zugriff gewährt werden.
Öffnen benannter Objekte
Benannte Objekte werden geöffnet, indem ein Name an eine entsprechende Open-API übergeben wird:
Benannte Objekte, die von einer verpackten Anwendung erstellt werden, werden im Namespace der Anwendung erstellt, andernfalls als benannter Objektpfad bezeichnet. Beim Öffnen benannter Objekte, die von einer gepackten Applikation erstellt wurden, muss dem Objektnamen der benannte Objektpfad der erstellenden Applikation vorangestellt werden.
GetAppContainerNamedObjectPath gibt den benannten Objektpfad für eine verpackte Anwendung auf Basis der SID zurück. Sie können die SID für eine verpackte Anwendung generieren, indem Sie den Paketfamiliennamen an DeriveAppContainerSidFromAppContainerNameübergeben.
Hinweis
Der Paketfamilienname kann während der Entwicklungsphase über den Paketmanifest-Editor in Visual Studio ermittelt werden, über das Partner Center für Anwendungen, die über den Microsoft Store veröffentlicht wurden, oder über den PowerShell-Befehl Get-AppxPackage für bereits installierte Anwendungen.
Verwenden Sie beim Öffnen benannter Objekte, die von einer verpackten Anwendung erstellt wurden, das Format <PATH>\<NAME>:
- Ersetzen Sie
<PATH>durch den benannten Objektpfad der Erstellungsanwendung. - Ersetzen Sie
<NAME>durch den Objektnamen.
Hinweis
Das Hinzufügen des Präfixes <PATH> zu Objektnamen ist nur erforderlich, wenn eine verpackte Anwendung das Objekt erstellt hat. Benannte Objekte, die von Win32-Anwendungen erstellt werden, müssen nicht näher spezifiziert werden, aber der Zugriff muss trotzdem gewährt werden, wenn die Objekte erstellt werden.
Bemerkungen
Benannte Objekte in verpackten Anwendungen sind standardmäßig isoliert, um die Sicherheit zu erhalten und sicherzustellen, dass die Unterstützung für Anwendungslebenszyklusereignisse wie Anhalten und Beenden gewährleistet wird. Das Freigeben benannter Objekte über Anwendungen hinweg führt zu engen Bindungs- und Versionsbeschränkungen und erfordert, dass jede Anwendung resilient gegenüber dem Lebenszyklus der anderen Anwendungen ist. Aus diesen Gründen wird empfohlen, benannte Objekte nur zwischen Anwendungen aus demselben Herausgeber zu teilen.