Поделиться через


Пользовательские объекты

Объекты пользовательского интерфейса поддерживают только один дескриптор для каждого объекта. Процессы не могут наследовать или дублировать дескриптора для пользовательских объектов. Процессы в одном сеансе не могут ссылаться на дескриптор пользователя в другом сеансе.

Существует теоретический предел в 65 536 пользовательских дескрипторов на сеанс. Однако максимальное количество пользовательских дескрипторов, которые могут быть открыты на сеанс, обычно ниже, так как это влияет на доступную память. Существует также ограничение по умолчанию для каждого процесса дескрипторов пользователей. Чтобы изменить это ограничение, задайте следующее значение реестра:

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

Это значение можно задать в диапазоне от 200 до 18 000.

Обработка пользовательских объектов

Дескриптор пользовательских объектов является общедоступным для всех процессов. То есть любой процесс может использовать дескриптор пользовательского объекта, если процесс имеет доступ к объекту безопасности.

На следующем рисунке приложение создает объект окна. Функция CreateWindowсоздает объект окна и возвращает дескриптор объекта.

приложения, создающее объект окна

После создания объекта окна приложение может использовать дескриптор окна для отображения или изменения окна. Дескриптор остается допустимым до тех пор, пока объект окна не будет уничтожен.

На следующем рисунке приложение уничтожает объект окна. Функция DestroyWindow удаляет объект окна из памяти, который запрещает дескриптор окна.

уничтожения объекта окна

Управление пользовательскими объектами

В следующей таблице перечислены пользовательские объекты, а также функции создателя и уничтожения каждого объекта. Создатель функций либо создает объект, либо дескриптор объекта или просто возвращает существующий дескриптор объекта. Функции разрушителя удаляют объект из памяти, который запрещает дескриптор объекта.

Объект User Функция Creator Функция разрушителя
Таблица акселератора CreateAcceleratorTable DestroyAcceleratorTable
Знак вставки CreateCaret DestroyCaret
Курсор CreateCursor, LoadCursor, LoadImage DestroyCursor
Беседа DDE DdeConnect, DdeConnectList DdeDisconnect, DdeDisconnectList
Крюк SetWindowsHookEx UnhookWindowsHookEx
Икона CreateIconIndirect, LoadIcon, LoadImage DestroyIcon
Меню CreateMenu, CreatePopupMenu, LoadMenu, LoadMenuIndirect DestroyMenu
Окно CreateWindow, CreateWindowEx, CreateDialogParam, CreateDialogIndirectParam, CreateMDIWindow DestroyWindow
Положение окна BeginDeferWindowPos EndDeferWindowPos