Kernelobjekt-Namespaces
Windows verfügt über mehrere Namespaces für die folgenden benannten Kernelobjekte: Ereignisse, Semaphoren, Mutexes, Wartezeitgeber, Dateizuordnungsobjekte, Auftragsobjekte und symbolische Verknüpfungsobjekte. Es gibt einen globalen Namespace, der hauptsächlich von Diensten in Client-/Serveranwendungen verwendet wird. Darüber hinaus verfügt jede Sitzung über einen separaten Namespace für diese Objekte.
Die separaten Sitzungs-Namespaces ermöglichen es mehreren Clients, dieselben Anwendungen auszuführen, ohne sich gegenseitig zu stören. Für Prozesse, die unter einer Clientsitzung gestartet wurden, verwendet das System standardmäßig den Clientsitzungsnamespace. Diese Prozesse können jedoch den globalen Namespace verwenden, indem das Präfix „Global\“ dem Objektnamen vorangestellt wird. Der folgende Code ruft beispielsweise CreateEvent auf und erstellt ein Ereignisobjekt namens CSAPP im globalen Namespace:
CreateEventW( NULL, FALSE, FALSE, L"Global\\CSAPP" );
Dienstanwendungen verwenden standardmäßig den globalen Namespace.
Hinweis
Der globale Namespace ist für Windows Store-Apps nicht verfügbar.
Sitzung Null wird nur für Hostingdienste verwendet, und es gibt keine Konsolensitzung, im Gegensatz zu Windows-Versionen vor Windows Vista.
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 Namespaces ist für Anwendungen, die benannte Objekte verwenden, um zu erkennen, dass bereits eine Instanz der Anwendung im System in allen Sitzungen ausgeführt wird. Dieses benannte Objekt muss im globalen Namespace anstelle des Namespace pro Sitzung erstellt oder geöffnet werden. Je häufiger die Anwendung einmal pro Sitzung ausgeführt wird, wird standardmäßig unterstützt, da das benannte Objekt in einem Sitzungsnamespace erstellt wird.
Neben dem Präfix „Global\“ können Clientprozesse das Präfix „Local\“ verwenden, um explizit ein Objekt im Sitzungsnamespace zu erstellen. Bei diesen Schlüsselwörter (Keywords) wird zwischen Groß- und Kleinschreibung unterschieden.
Das Präfix „Session\“ ist für die Systemverwendung reserviert, und Sie sollten es nicht in Namen von Kernelobjekten verwenden.
Schnelle Benutzerumschaltung wird mithilfe von Sitzungen implementiert. Der erste Benutzer, der sich anmelden soll, verwendet Sitzung 1, der nächste Benutzer, bei dem sich angemeldet werden soll, Sitzung 2 usw. Kernelobjektnamen müssen den Richtlinien für Remotedesktopdienste entsprechen, damit Anwendungen mehrere Benutzer unterstützen können.
Die Erstellung eines Dateizuordnungsobjekts oder eines symbolischen Verknüpfungsobjekts im globalen Namespace, z. B. mithilfe von CreateFileMapping, aus einer anderen Sitzung als Sitzung Null ist ein privilegierter Vorgang. Aus diesem Gründen muss eine Anwendung SeCreateGlobalPrivilege aktiviert haben, um ein Dateizuordnungsobjekt oder ein symbolisches Verknüpfungsobjekt im globalen Namespace zu erstellen. Die Berechtigungsprüfung ist auf die Erstellung dieser Objekte beschränkt und gilt nicht für das Öffnen vorhandener Objekte. Wenn beispielsweise ein Dienst oder das System ein Dateizuordnungsobjekt im globalen Namespace erstellt, kann jeder Prozess, der in einer beliebigen Sitzung läuft, auf dieses Dateizuordnungsobjekt zugreifen, sofern der Prozess über den erforderlichen Zugriff verfügt.