Benutzerobjekte

Benutzeroberflächenobjekte unterstützen nur ein Handle pro Objekt. Prozesse können keine Handles an 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 vom verfügbaren Arbeitsspeicher beeinflusst wird. Es gibt auch ein Standardlimit pro Prozess für Benutzerhandles. Um diesen Grenzwert zu ändern, legen Sie den folgenden Registrierungswert fest:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\Currentversion\Fenster\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, sofern der Prozess über Sicherheitszugriff auf das Objekt verfügt.

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

Anwendung, die ein Fensterobjekt erstellt

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ören eines Fensterobjekts

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 Arbeitsspeicher, wodurch das Objekthandle ungültig wird.

Benutzerobjekt Creator-Funktion Destroyer-Funktion
Accelerator-Tabelle CreateAcceleratorTable DestroyAcceleratorTable
Einfügemarke CreateCaret DestroyCaret
Cursor CreateCursor, LoadCursor, LoadImage DestroyCursor
DDE-Konversation DdeConnect, DdeConnectList DdeDisconnect, DdeDisconnectList
Hook SetWindowsHookEx UnhookWindowsHookEx
Symbol CreateIconIndirect, LoadIcon, LoadImage DestroyIcon
Menü CreateMenu, CreatePopupMenu, LoadMenu, LoadMenuIndirect DestroyMenu
Fenster CreateWindow, CreateWindowEx, CreateDialogParam, CreateDialogIndirectParam, CreateMDIWindow DestroyWindow
Fensterposition BeginDeferWindowPos EndDeferWindowPos