Kernelobjektnamespaces

Ein Remotedesktopdiensteserver verfügt über mehrere Namespaces für die folgenden benannten Kernelobjekte: Ereignisse, Semaphore, Mutexe, wartebare Timer, Dateizuordnungsobjekte und Auftragsobjekte. Es gibt einen globalen Namespace, der hauptsächlich von Diensten in Client-/Serveranwendungen verwendet wird. Darüber hinaus verfügt jede Clientsitzung über einen separaten Namespace für diese Objekte, z. B. in Windows Vista.

Die separaten Clientsitzungsnamespaces ermöglichen es mehreren Clients, dieselben Anwendungen auszuführen, ohne sich gegenseitig zu stören. Für Prozesse, die unter einer Clientsitzung gestartet werden, verwendet das System standardmäßig den Sitzungsnamespace. Diese Prozesse können jedoch den globalen Namespace verwenden, indem sie dem Objektnamen das Präfix "Global\" voranstellen. Der folgende Code ruft beispielsweise CreateEvent auf und erstellt ein Ereignisobjekt namens CSAPP im globalen Namespace:

Hinweis

Der globale Namespace ist für Windows Store-Apps nicht verfügbar.

 

CreateEvent( NULL, FALSE, FALSE, "Global\\CSAPP" );

Dienstanwendungen in einer Remotedesktopdienste-Umgebung verwenden standardmäßig den globalen Namespace.

Sitzung Null wird nur für Hostingdienste verwendet, und im Gegensatz zu früheren Versionen von Windows gibt es keine Konsolensitzung.

Der globale Namespace ermöglicht Prozessen in mehreren Clientsitzungen die Kommunikation mit einer Dienstanwendung. Beispielsweise kann eine Client-/Serveranwendung ein Mutex-Objekt für die Synchronisierung verwenden. Das Servermodul kann das mutex-Objekt im globalen Namespace erstellen. Anschließend kann eine Clientsitzung das Präfix "Global\" verwenden, um das Mutex-Objekt zu öffnen.

Eine weitere Verwendung des globalen Namespace ist für Anwendungen, die benannte Objekte verwenden, um zu erkennen, dass bereits eine instance der Anwendung vorhanden ist, die im System über alle Sitzungen ausgeführt wird. Dieses benannte Objekt muss im globalen Namespace anstelle des Sitzungsnamespaces erstellt oder geöffnet werden. Der häufigere Fall, dass die Anwendung einmal pro Sitzung ausgeführt wird, wird standardmäßig unterstützt, da das benannte Objekt in einem Sitzungsnamespace erstellt wird.

Zusätzlich zum Präfix "Global\" können Clientprozesse das Präfix "Local\" verwenden, um explizit ein Objekt in ihrem Sitzungsnamespace zu erstellen. Bei diesen Schlüsselwörtern wird die Groß-/Kleinschreibung beachtet.

Das Präfix "Session\" ist für die Systemverwendung reserviert und sollte nicht in Namen von Kernelobjekten verwendet werden.

Der schnelle Benutzerwechsel wird mithilfe von Remotedesktopdienste-Sitzungen implementiert. Der erste Benutzer, der sich anmeldet, verwendet die erste Sitzung, der nächste Benutzer für die Anmeldung verwendet Sitzung 2 usw. Kernelobjektnamen müssen den Richtlinien für Remotedesktopdienste entsprechen, damit Anwendungen mehrere Benutzer unterstützen können.

Die Erstellung eines Dateizuordnungsobjekts im globalen Namespace mithilfe von CreateFileMapping aus einer anderen Sitzung als Session Zero ist ein privilegierter Vorgang. Daher muss für eine Anwendung, die in einer beliebigen Remotedesktopsitzung (RD-Sitzungshost)-Serversitzung ausgeführt wird , SeCreateGlobalPrivilege aktiviert sein, um ein Dateizuordnungsobjekt im globalen Namespace erfolgreich erstellen zu können. Die Berechtigungsprüfung ist auf die Erstellung von Dateizuordnungsobjekten beschränkt und gilt nicht für das Öffnen vorhandener Objekte. Wenn beispielsweise ein Dienst oder das System ein Dateizuordnungsobjekt erstellt, kann jeder Prozess, der in einer Beliebigen Sitzung ausgeführt wird, auf dieses Dateizuordnungsobjekt zugreifen, sofern der Benutzer über den erforderlichen Zugriff verfügt.