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 sur des 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\LOGICIEL\Microsoft\Windows NT\Currentversion\Windows\USERProcessHandleQuota

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

Handles to User Objects

Les descripteurs des objets utilisateur sont publics pour 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 window. La fonction CreateWindow crée l’objet window et retourne un handle d’objet.

application créant un objet window

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 window soit détruit.

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

destruction d’un objet window

Gestion des objets utilisateur

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

Objet utilisateur Creator, fonction Destroyer, fonction
Table d’accélérateur CreateAcceleratorTable DestroyAcceleratorTable
Caret CreateCaret DestroyCaret
Curseur CreateCursor, LoadCursor, LoadImage DestroyCursor
Conversation DDE DdeConnect, DdeConnectList DdeDisconnect, DdeDisconnectList
Hook 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