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