Freigeben über


Benutzerobjekte

Benutzeroberflächenobjekte unterstützen nur ein Handle pro Objekt. Prozesse können keine Handles für Benutzerobjekte erben oder duplizieren. Prozesse in einer Sitzung können nicht auf ein Benutzerhandle in einer anderen Sitzung verweisen.

Es gibt eine theoretische Grenze von 65.536 Benutzerhandles pro Sitzung. Die maximale Anzahl von Benutzerhandles, die pro Sitzung geöffnet werden können, ist jedoch in der Regel niedriger, da sie von verfügbarem Arbeitsspeicher betroffen ist. Es gibt auch ein Standardlimit pro Prozess von Benutzerhandles. Um diesen Grenzwert zu ändern, legen Sie den folgenden Registrierungswert fest:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\USERProcessHandleQuota

Dieser Wert kann auf eine Zahl zwischen 200 und 18.000 festgelegt werden.

Handles für Benutzerobjekte

Handles für Benutzerobjekte sind für alle Prozesse öffentlich. Das heißt, jeder Prozess kann das Benutzerobjekthandle verwenden, vorausgesetzt, der Prozess hat Sicherheitszugriff auf das Objekt.

In der folgenden Abbildung erstellt eine Anwendung ein Fensterobjekt. Die CreateWindow--Funktion erstellt das Fensterobjekt und gibt ein Objekthandle zurück.

Anwendung zum Erstellen eines Fensterobjekts

Nachdem das Fensterobjekt erstellt wurde, kann die Anwendung das Fensterhandle verwenden, um das Fenster anzuzeigen oder zu ändern. Das Handle bleibt gültig, bis das Fensterobjekt zerstört wird.

In der nächsten Abbildung zerstört die Anwendung das Fensterobjekt. Die DestroyWindow-Funktion entfernt das Fensterobjekt aus dem Arbeitsspeicher, wodurch das Fensterhandle ungültig wird.

zerstört ein Fensterobjekt

Verwalten von Benutzerobjekten

In der folgenden Tabelle sind die Benutzerobjekte zusammen mit den Ersteller- und Zerstörerfunktionen jedes Objekts aufgeführt. Die Erstellerfunktionen erstellen entweder das Objekt und ein Objekthandle oder geben einfach das vorhandene Objekthandle zurück. Die Zerstörerfunktionen entfernen das Objekt aus dem Speicher, wodurch das Objekthandle ungültig wird.

User-Objekt Creator-Funktion Zerstörerfunktion
Accelerator-Tabelle CreateAcceleratorTable- DestroyAcceleratorTable-
Einschaltungszeichen CreateCaret- DestroyCaret
Cursor CreateCursor, LoadCursor, LoadImage- DestroyCursor
DDE-Unterhaltung DdeConnect, DdeConnectList DdeDisconnect, DdeDisconnectList
Haken SetWindowsHookEx- UnhookWindowsHookEx-
Ikone CreateIconIndirect, LoadIcon, LoadImage- DestroyIcon
Menü CreateMenu, CreatePopupMenu, LoadMenu, LoadMenuIndirect DestroyMenu
Fenster CreateWindow, CreateWindowEx, CreateDialogParam, CreateDialogIndirectParam, CreateMDIWindow DestroyWindow
Fensterposition BeginDeferWindowPos EndDeferWindowPos