Obiekty użytkownika

Obiekty interfejsu użytkownika obsługują tylko jeden uchwyt na obiekt. Procesy nie mogą dziedziczyć ani duplikować dojść do obiektów użytkownika. Procesy w jednej sesji nie mogą odwoływać się do uchwytu użytkownika w innej sesji.

Istnieje teoretyczny limit 65 536 dojść użytkowników na sesję. Jednak maksymalna liczba dojść użytkowników, które można otworzyć na sesję, jest zwykle niższa, ponieważ ma to wpływ na dostępną pamięć. Istnieje również domyślny limit dojść użytkownika dla poszczególnych procesów. Aby zmienić ten limit, ustaw następującą wartość rejestru:

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

Tę wartość można ustawić na liczbę z zakresu od 200 do 18 000.

Dojścia do obiektów użytkownika

Dojścia do obiektów użytkownika są publiczne dla wszystkich procesów. Oznacza to, że każdy proces może używać uchwytu obiektu użytkownika, pod warunkiem, że proces ma dostęp zabezpieczeń do obiektu.

Na poniższej ilustracji aplikacja tworzy obiekt okna. Funkcja CreateWindow tworzy obiekt okna i zwraca uchwyt obiektu.

aplikacji tworzącej obiekt okna

Po utworzeniu obiektu okna aplikacja może użyć uchwytu okna, aby wyświetlić lub zmienić okno. Uchwyt pozostaje prawidłowy do momentu zniszczenia obiektu okna.

Na następnej ilustracji aplikacja niszczy obiekt okna. Funkcja DestroyWindow usuwa obiekt okna z pamięci, co powoduje unieważnienie uchwytu okna.

niszczenie obiektu okna

Zarządzanie obiektami użytkownika

W poniższej tabeli wymieniono obiekty użytkownika wraz z funkcjami twórcy i niszczyciela każdego obiektu. Twórca tworzy obiekt i uchwyt obiektu lub po prostu zwraca istniejący uchwyt obiektu. Funkcje niszczyciela usuwają obiekt z pamięci, co unieważnia uchwyt obiektu.

Obiekt użytkownika Creator, funkcja Destroyer, funkcja
Tabela akceleratora CreateAcceleratorTable DestroyAcceleratorTable
Daszek CreateCaret DestroyCaret
Kursor CreateCursor, LoadCursor, LoadImage DestroyCursor
Konwersacja DDE DdeConnect, DdeConnectList DdeDisconnect DdeDisconnectList
Haczyk SetWindowsHookEx unhookWindowsHookEx
Ikona CreateIconIndirect, LoadIcon, LoadImage DestroyIcon
Menu CreateMenu, CreatePopupMenu, LoadMenu, LoadMenuIndirect DestroyMenu
Okno CreateWindow, CreateWindowEx, CreateDialogParam, CreateDialogIndirectParam, CreateMDIWindow DestroyWindow
Położenie okna BeginDeferWindowPos EndDeferWindowPos