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.
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.
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 |