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


Функция GetProcessHandleFromHwnd

Извлекает дескриптор процесса из дескриптора окна.

Синтаксис

HANDLE WINAPI GetProcessHandleFromHwnd(
  _In_ HWND hwnd
);

Параметры

hwnd [in]

Тип: HWND

Дескриптор окна.

Возвращаемое значение

Тип: HANDLE

В случае успешного выполнения возвращает дескриптор процесса, которому принадлежит окно.

В случае успеха возвращает значение NULL.

Комментарии

В предыдущих версиях операционной системы процесс мог открыть другой процесс (например, для доступа к памяти) с помощью OpenProcess. Эта функция выполняется успешно, если вызывающий объект имеет соответствующие привилегии; Как правило, вызывающий и целевой процесс должны быть одинаковыми пользователями.

Однако в Windows Vista OpenProcess завершается сбоем в сценарии, когда вызывающий объект имеет UIAccess, а целевой процесс имеет повышенные привилегии. В этом случае владелец целевого процесса находится в группе Администраторы, но вызывающий процесс выполняется с ограниченным маркером, поэтому не имеет членства в этой группе и ему отказано в доступе к процессу с повышенными привилегиями. Однако если вызывающий объект имеет UIAccess, он может использовать обработчик Windows для внедрения кода в целевой процесс и из целевого процесса отправить дескриптор обратно вызывающей стороне.

GetProcessHandleFromHwnd — это удобная функция, которая использует этот метод для получения дескриптора процесса, которому принадлежит указанный HWND. Обратите внимание, что он выполняется успешно только в тех случаях, когда вызывающий и целевой процесс выполняются от имени одного пользователя. Возвращенный дескриптор имеет следующие привилегии: PROCESS_DUP_HANDLE | PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE | СИНХРОНИЗИРОВАТЬ. Если требуются другие привилегии, может потребоваться явно реализовать метод перехвата, а не использовать эту функцию.

Требования

Требование Значение
Минимальная версия клиента
Windows XP [только классические приложения]
Минимальная версия сервера
Windows Server 2003 [только классические приложения]
DLL
Oleacc.dll