Partager via


Objets utilisateur

Les objets d’interface utilisateur ne prennent en charge qu’un seul handle par objet. Les processus ne peuvent pas hériter ou dupliquer des handles aux objets utilisateur. Les processus d’une session ne peuvent pas référencer un handle utilisateur dans une autre session.

Il existe une limite théorique de 65 536 handles utilisateur par session. Toutefois, le nombre maximal de handles utilisateur pouvant être ouverts par session est généralement inférieur, car il est affecté par la mémoire disponible. Il existe également une limite par défaut par processus de handles utilisateur. Pour modifier cette limite, définissez la valeur de Registre suivante :

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

Cette valeur peut être définie sur un nombre compris entre 200 et 18 000.

Handles vers les objets utilisateur

Les handles pour les objets utilisateur sont publics à tous les processus. Autrement dit, n’importe quel processus peut utiliser le handle d’objet utilisateur, à condition que le processus dispose d’un accès de sécurité à l’objet.

Dans l’illustration suivante, une application crée un objet de fenêtre. La fonction CreateWindow crée l’objet window et retourne un handle d’objet.

application créant un objet fenêtre

Une fois l’objet de fenêtre créé, l’application peut utiliser le handle de fenêtre pour afficher ou modifier la fenêtre. Le handle reste valide jusqu’à ce que l’objet fenêtre soit détruit.

Dans l’illustration suivante, l’application détruit l’objet fenêtre. La fonction DestroyWindow supprime l’objet de fenêtre de la mémoire, ce qui invalide le handle de fenêtre.

détruire un objet fenêtre

Gestion des objets utilisateur

Le tableau suivant répertorie les objets utilisateur, ainsi que les fonctions créateur et destructeur de chaque objet. Les fonctions de créateur créent l’objet et un handle d’objet ou retournent simplement le handle d’objet existant. Les fonctions de destroyer suppriment l’objet de la mémoire, ce qui invalide le handle d’objet.

Objet utilisateur Fonction Creator Fonction destroyer
Table accélérateur CreateAcceleratorTable DestroyAcceleratorTable
Caret CreateCaret DestroyCaret
Curseur CreateCursor , LoadCursor, LoadImage DestroyCursor
Conversation DDE DdeConnect, DdeConnectList DdeDisconnect, DdeDisconnectList
Crochet SetWindowsHookEx UnhookWindowsHookEx
Icône CreateIconIndirect, LoadIcon, LoadImage DestroyIcon
Menu CreateMenu, CreatePopupMenu, LoadMenu, LoadMenuIndirect DestroyMenu
Fenêtre CreateWindow, CreateWindowEx, CreateDialogParam, CreateDialogIndirectParam, CreateMDIWindow DestroyWindow
Position de la fenêtre BeginDeferWindowPos EndDeferWindowPos