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 d’objets utilisateur. Les processus d’une session ne peuvent pas faire référence à un handle d’utilisateur dans une autre session.
Il existe une limite théorique de 65 536 descripteurs utilisateur par session. Toutefois, le nombre maximal de descripteurs utilisateur qui peuvent être ouverts par session est généralement plus faible, car il est affecté par la mémoire disponible. Il y a également une limite par processus par défaut des handles utilisateur. Pour modifier cette limite, définissez la valeur de Registre suivante :
HKEY _ logiciel de l' _ ordinateur LOCAL \ \ Microsoft \ Windows NT \ CurrentVersion \ Windows \ USERProcessHandleQuota
Cette valeur peut être définie sur un nombre compris entre 200 et 18 000.
Handles vers des objets utilisateur
Les handles vers les objets utilisateur sont publics pour tous les processus. Autrement dit, tout processus peut utiliser le handle d’objet utilisateur, à condition que le processus ait 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 de fenêtre et retourne un handle d’objet.

Une fois l’objet Window créé, l’application peut utiliser le handle de fenêtre pour afficher ou modifier la fenêtre. Le descripteur 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.

Gestion des objets utilisateur
Le tableau suivant répertorie les objets utilisateur, ainsi que les fonctions de création et de destruction de chaque objet. Les fonctions Creator créent l’objet et un handle d’objet, ou simplement retournent simplement le handle d’objet existant. Les fonctions Destroy suppriment l’objet de la mémoire, ce qui invalide le descripteur d’objet.
| Objet utilisateur | Creator, fonction | Fonction Destroy |
|---|---|---|
| Table d’accélérateurs | CreateAcceleratorTable | DestroyAcceleratorTable |
| Signe insertion | 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 |