Функция 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 |
|