Share via


Freigeben von benannten Objekten

In diesem Thema wird erläutert, wie benannte Objekte zwischen Universelle Windows-Plattform(UWP)-Anwendungen und Win32-Anwendungen freigegeben werden.

Benannte Objekte in gepackten Anwendungen

Benannte Objekte bieten eine einfache Möglichkeit für Prozesse, Objekthandles freizugeben. 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 die Threadsynchronisierung und die prozessübergreifende Kommunikation verwendet.

Standardmäßig können gepackte Anwendungen nur auf benannte Objekte zugreifen, die sie erstellt haben. Um benannte Objekte für gepackte Anwendungen freizugeben, müssen Berechtigungen festgelegt werden, wenn Objekte erstellt werden, und Namen müssen beim Öffnen von Objekten qualifiziert werden.

Erstellen benannter Objekte

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 gepackte Anwendungen freizugeben, muss die Berechtigung innerhalb der ACLs erteilt werden, wenn die benannten Objekte erstellt werden.

Sicherheitsbezeichner (SIDs) stellen Identitäten innerhalb von ACLs dar. Jede gepackte Anwendung verfügt über eine eigene SID basierend auf ihrem Paketfamiliennamen. Sie können die SID für eine gepackte Anwendung generieren, indem Sie deren Paketfamiliennamen an DeriveAppContainerSidFromAppContainerName übergeben.

Hinweis

Der Paketfamilienname kann während der Entwicklungszeit über den Paketmanifest-Editor in Visual Studio, über Partner Center für Anwendungen, die über den Microsoft Store veröffentlicht werden, oder über den PowerShell-Befehl Get-AppxPackage für anwendungen gefunden werden, die bereits installiert sind.

In diesem Beispiel wird das grundlegende Muster veranschaulicht, das für die ACL eines benannten Objekts erforderlich ist. Um benannte Objekte mit gepackten Anwendungen gemeinsam zu nutzen, erstellen Sie eine EXPLICIT_ACCESS-Struktur für jede Anwendung:

Indem Sie den LPSECURITY_ATTRIBUTES Parameter in Create Aufrufen mit EXPLICIT_ACCESS Regeln für gepackte Anwendungen auffüllen, können Sie diesen Anwendungen Zugriff gewähren, um das benannte Objekt zu öffnen.

Hinweis

Win32-Anwendungen können auf alle benannten Objekte zugreifen, die von gepackten Anwendungen erstellt wurden, solange sie die Objektnamen beim Öffnen qualifizieren. Ihnen muss kein Zugriff gewährt werden.

Öffnen benannter Objekte

Benannte Objekte werden geöffnet, indem sie einen Namen an eine entsprechende Open API übergeben:

Benannte Objekte, die von einer gepackten Anwendung erstellt werden, werden innerhalb des Namespace der Anwendung erstellt, der auch als benannter Objektpfad bezeichnet wird. Beim Öffnen benannter Objekte, die von einer gepackten Anwendung erstellt wurden, muss den Objektnamen der benannte Objektpfad der erstellenden Anwendung vorangestellt werden.

GetAppContainerNamedObjectPath gibt den benannten Objektpfad für eine gepackte Anwendung basierend auf ihrer SID zurück. Sie können die SID für eine gepackte Anwendung generieren, indem Sie deren Paketfamiliennamen an DeriveAppContainerSidFromAppContainerName übergeben.

Hinweis

Der Paketfamilienname kann während der Entwicklungszeit über den Paketmanifest-Editor in Visual Studio, über Partner Center für Anwendungen, die über den Microsoft Store veröffentlicht werden, oder über den PowerShell-Befehl Get-AppxPackage für anwendungen gefunden werden, die bereits installiert sind.

Verwenden Sie beim Öffnen benannter Objekte, die von einer gepackten Anwendung erstellt wurden, das Format <PATH>\<NAME>:

  • Ersetzen Sie durch <PATH> den benannten Objektpfad der erstellend-Anwendung.
  • Ersetzen Sie durch <NAME> den Objektnamen.

Hinweis

Das Präfix von Objektnamen mit <PATH> ist nur erforderlich, wenn das Objekt von einer gepackten Anwendung erstellt wurde. Benannte Objekte, die von Win32-Anwendungen erstellt werden, müssen nicht qualifiziert werden, aber der Zugriff muss weiterhin gewährt werden, wenn die Objekte erstellt werden.

Hinweise

Benannte Objekte in gepackten Anwendungen werden standardmäßig isoliert, um die Sicherheit zu wahren und die Unterstützung für Lebenszyklusereignisse der Anwendung wie Anhalten und Beenden sicherzustellen. Die anwendungsübergreifende Freigabe benannter Objekte führt zu engen Bindungs- und Versionsverwaltungseinschränkungen und erfordert, dass jede Anwendung gegenüber dem Lebenszyklus anderer widerstandsfähig ist. Aus diesen Gründen wird empfohlen, benannte Objekte nur zwischen Anwendungen desselben Herausgebers gemeinsam zu nutzen.