Share via


Objektnamen

Benannte Objekte bieten eine einfache Möglichkeit für Prozesse, Objekthandles freizugeben. Nachdem ein Prozess ein benanntes Ereignis-, Mutex-, Semaphor- oder Timerobjekt erstellt hat, können andere Prozesse den Namen verwenden, um die entsprechende Funktion ( OpenEvent, OpenMutex, OpenSemaphore oder OpenWaitableTimer) aufzurufen, um ein Handle für das Objekt zu öffnen. Beim Namenvergleich wird die Groß-/Kleinschreibung beachtet.

Die Namen von Ereignis-, Semaphor-, Mutex-, Wartezeitgeber-, Dateizuordnungs- 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_HANDLE zurück. Verwenden Sie daher beim Erstellen benannter Objekte eindeutige Namen, und überprüfen Sie die Funktionsrückgabewerte 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 und gibt ein Handle an das vorhandene Objekt zurück, und GetLastError gibt ERROR_ALREADY_EXISTS zurü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 dem Unterschied, dass es nicht erforderlich ist, sicherzustellen, dass der Erstellungsprozess zuerst gestartet wird. Bei Verwendung dieser Technik für Mutex-Objekte sollte jedoch keiner der aufrufenden Prozesse den sofortigen Besitz des Mutex anfordern. Wenn mehrere Prozesse sofortigen Besitz anfordern, kann es schwierig sein, vorherzusagen, welcher Prozess tatsächlich den ursprünglichen Besitz erhält.

Eine Terminal services-Umgebung verfügt über einen globalen Namespace für Ereignisse, Semaphore, Mutexes, wartebare Timer, Dateizuordnungsobjekte und Auftragsobjekte. Darüber hinaus verfügt jede Terminaldienste-Clientsitzung über einen eigenen Namespace für diese Objekte. Terminaldienste-Clientprozesse können Objektnamen mit dem Präfix "Global\" oder "Local\" verwenden, um explizit ein Objekt im globalen Oder Sitzungsnamespace zu erstellen. Weitere Informationen finden Sie unter Kernelobjektnamespaces. Der schnelle Benutzerwechsel wird mithilfe von Terminaldienstesitzungen implementiert (jeder Benutzer meldet sich bei einer anderen Sitzung an). Kernelobjektnamen müssen den für Terminaldienste beschriebenen Richtlinien entsprechen, damit Anwendungen mehrere Benutzer unterstützen können.

Synchronisierungsobjekte können in einem privaten Namespace erstellt werden. Weitere Informationen finden Sie unter Objektnamespaces.

Verwenden benannter Objekte