Oggetti utente
Gli oggetti dell'interfaccia utente supportano un solo handle per oggetto. I processi non possono ereditare o duplicare handle agli oggetti utente. I processi in una sessione non possono fare riferimento a un handle utente in un'altra sessione.
Esiste un limite teorico di 65.536 handle utente per sessione. Tuttavia, il numero massimo di handle utente che possono essere aperti per sessione è in genere inferiore, poiché è interessato dalla memoria disponibile. Esiste anche un limite predefinito per processo degli handle utente. Per modificare questo limite, impostare il valore del Registro di sistema seguente:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\Currentversion\Finestre\USERProcessHandleQuota
Questo valore può essere impostato su un numero compreso tra 200 e 18.000.
Handle agli oggetti utente
Gli handle per gli oggetti utente sono pubblici per tutti i processi. Ovvero, qualsiasi processo può usare l'handle dell'oggetto utente, purché il processo disponga dell'accesso di sicurezza all'oggetto.
Nella figura seguente un'applicazione crea un oggetto finestra. La funzione CreateWindow crea l'oggetto finestra e restituisce un handle di oggetto.
Dopo aver creato l'oggetto finestra, l'applicazione può usare l'handle della finestra per visualizzare o modificare la finestra. L'handle rimane valido fino a quando l'oggetto finestra non viene eliminato definitivamente.
Nell'illustrazione successiva l'applicazione elimina definitivamente l'oggetto finestra. La funzione DestroyWindow rimuove l'oggetto finestra dalla memoria, che invalida l'handle della finestra.
Gestione degli oggetti utente
Nella tabella seguente sono elencati gli oggetti utente, insieme alle funzioni creator e destroyer di ogni oggetto. Le funzioni creator creano l'oggetto e un handle di oggetto o restituiscono semplicemente l'handle dell'oggetto esistente. Le funzioni destroyer rimuovono l'oggetto dalla memoria, che invalida l'handle dell'oggetto.
Oggetto utente | Funzione Creator | Funzione Destroyer |
---|---|---|
Tabella acceleratore | CreateAcceleratorTable | DestroyAcceleratorTable |
Cursore | CreateCaret | DestroyCaret |
Cursore | CreateCursor, LoadCursor, LoadImage | DestroyCursor |
Conversazione DDE | DdeConnect, DdeConnectList | DdeDisconnect, DdeDisconnectList |
Gancio | Setwindowshookex | UnhookWindowsHookEx |
Icona | CreateIconIndirect, LoadIcon, LoadImage | DestroyIcon |
Menu | CreateMenu, CreatePopupMenu, LoadMenu, LoadMenuIndirect | DestroyMenu |
Finestra | CreateWindow, CreateWindowEx, CreateDialogParam, CreateDialogIndirectParam, CreateMDIWindow | Destroywindow |
Posizione finestra | BeginDeferWindowPos | EndDeferWindowPos |