Objektnamen
Benannte Objekte bieten eine einfache Möglichkeit für Prozesse zum Freigeben von Objekthandles. Nachdem ein Prozess ein benanntes Ereignis, Mutex-, Semaphor- oder Timerobjekt erstellt hat, können andere Prozesse den Namen verwenden, um die entsprechende Funktion aufzurufen ( OpenEvent, OpenMutex, OpenSemaphoroder OpenWaitableTimer), um ein Handle für das Objekt zu öffnen. Bei dem Namensvergleich wird die Groß-/Kleinschreibung beachtet.
Die Namen von Ereignis-, Semaphor-, Mutex-, Wartezeitgeber, Dateizuordnung und Auftragsobjekten verwenden denselben Namespace. Wenn Sie versuchen, ein Objekt mit einem Namen zu erstellen, der von einem Objekt eines anderen Typs verwendet wird, schlägt die Funktion fehl und GetLastError gibt ERROR_INVALID_HANDLEzurück. Verwenden Sie daher beim Erstellen benannter Objekte eindeutige Namen, und überprüfen Sie unbedingt die Rückgabewerte der Funktion auf Fehler mit doppelten Namen.
Wenn Sie versuchen, ein Objekt mit einem Namen zu erstellen, der von einem Objekt desselben Typs verwendet wird, wird die Funktion erfolgreich ausgeführt, ein Handle an das vorhandene Objekt zurückgegeben, und GetLastError gibt ERROR_ALREADY_EXISTSzurück. Wenn beispielsweise der in einem Aufruf der CreateMutex-Funktion angegebene Name mit dem Namen eines vorhandenen Mutex-Objekts übereinstimmt, gibt die Funktion ein Handle an das vorhandene Objekt zurück. In diesem Fall entspricht der Aufruf von CreateMutex- einem Aufruf der OpenMutex-funktion. Wenn mehrere Prozesse CreateMutex- für denselben Mutex verwenden, entspricht daher einem Prozess, der CreateMutex- aufruft, während die anderen Prozesse OpenMutex-aufrufen, mit der Ausnahme, dass der Erstellungsprozess nicht mehr erforderlich ist. Bei Verwendung dieser Technik für Mutex-Objekte sollte jedoch keiner der aufrufenden Prozesse den sofortigen Besitz des Mutex anfordern. Wenn mehrere Prozesse den sofortigen Besitz anfordern, kann es schwierig sein, vorherzusagen, welcher Prozess tatsächlich den ursprünglichen Besitz erhält.
Eine Terminaldienste-Umgebung verfügt über einen globalen Namespace für Ereignisse, Semaphore, Mutexes, Wartezeitgeber, Dateizuordnungsobjekte und Auftragsobjekte. Darüber hinaus verfügt jede Terminaldienste-Clientsitzung über einen eigenen separaten Namespace für diese Objekte. Clientprozesse von Terminaldiensten können Objektnamen mit einem Präfix "Global\" oder "Local\" verwenden, um explizit ein Objekt im globalen oder Sitzungsnamespace zu erstellen. Weitere Informationen finden Sie unter Kernel Object Namespaces. Schnelle Benutzerumschaltung wird mithilfe von Terminaldienstesitzungen implementiert (jeder Benutzer meldet sich bei einer anderen Sitzung an). Kernelobjektnamen müssen den Richtlinien für Terminaldienste entsprechen, damit Anwendungen mehrere Benutzer unterstützen können.
Synchronisierungsobjekte können in einem privaten Namespace erstellt werden. Weitere Informationen finden Sie unter Object Namespaces.
Verwandte Themen