Freigeben von benannten Objekten
In diesem Thema wird erläutert, wie benannte Objekte zwischen Universelle Windows-Plattform -Anwendungen (UWP) und Win32-Anwendungen freigegeben werden.
Benannte Objekte in verpackten Anwendungen
Benannte Objekte bieten eine einfache Möglichkeit für Prozesse zum Freigeben von Objekthandles. 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 Interprocesskommunikation verwendet.
Standardmäßig können verpackte Anwendungen nur auf benannte Objekte zugreifen, die sie erstellt haben. Um benannte Objekte für verpackte 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 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 Entwicklungszeit über den Paketmanifest-Editor in Visual Studio, über das Partner Center für Anwendungen gefunden werden, die über den Microsoft Store veröffentlicht wurden, oder über den Befehl "Get-AppxPackage PowerShell" für bereits installierte Anwendungen.
In diesem Beispiel wird das grundlegende Muster veranschaulicht, das für ACL ein benanntes Objekt erforderlich ist. 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 =
geeignete Berechtigungen basierend auf dem Objekt und der beabsichtigten VerwendunggrfInheritance = NO_INHERITANCE
Trustee.TrusteeForm = TRUSTEE_IS_SID
Trustee.TrusteeType = TRUSTEE_IS_USER
Trustee.ptstrName =
die von DeriveAppContainerSidFromAppContainerName erworbene SID
Indem Sie den LPSECURITY_ATTRIBUTES
Parameter in Create
Aufrufen mit EXPLICIT_ACCESS
Regeln für verpackte Anwendungen auffüllen, können Sie zugriff auf diese Anwendungen gewähren, um das benannte Objekt zu öffnen.
Hinweis
Win32-Anwendungen können auf alle benannten Objekte zugreifen, die von verpackten Anwendungen erstellt wurden, solange sie beim Öffnen die Objektnamen qualifizieren. Sie müssen keinen Zugriff gewähren.
Ö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 verpackten Anwendung erstellt wurden, müssen die Objektnamen dem benannten Objektpfad der Erstellungsanwendung vorangestellt werden.
GetAppContainerNamedObjectPath gibt den benannten Objektpfad für eine verpackte Anwendung basierend auf 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 Entwicklungszeit über den Paketmanifest-Editor in Visual Studio, über das Partner Center für Anwendungen gefunden werden, die über den Microsoft Store veröffentlicht wurden, oder über den Befehl "Get-AppxPackage PowerShell" 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>
ihn durch den benannten Objektpfad der Erstellungsanwendung. - Ersetzen Sie
<NAME>
den Namen des Objekts.
Hinweis
Das Präfix von Objektnamen ist <PATH>
nur erforderlich, wenn eine verpackte Anwendung das Objekt erstellt hat. Benannte Objekte, die von Win32-Anwendungen erstellt wurden, müssen nicht qualifiziert werden, aber der Zugriff muss weiterhin gewährt werden, wenn die Objekte erstellt werden.
Hinweise
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 für alle Anwendungen führt zu engen Bindungs- und Versionsverwaltungseinschränkungen und erfordert, dass jede Anwendung für den Lebenszyklus anderer widerstandsfähig ist. Aus diesen Gründen wird empfohlen, benannte Objekte nur zwischen Anwendungen aus demselben Herausgeber zu teilen.