如何获取提升进程的进程句柄?
How to get the process handle of an elevated process?
对于 Delphi 10 Seattle,我使用此代码获取进程句柄:
uses
Winapi.Windows;
var
hp: THandle;
begin
hp := OpenProcess(PROCESS_QUERY_INFORMATION, False, ProcessID);
这适用于所有进程,包括 32 位和 64 位。
不幸的是,它不适用于 ELEVATED PROCESSES,它返回 0.
那么如何获取提升进程的进程句柄?
简单的回答是你不能这样做。系统说不行。当您调用 GetLastError
时,返回的值将为 ERROR_ACCESS_DENIED
。您的进程没有足够的权限获得 PROCESS_QUERY_INFORMATION
已提升的进程。
如果您在进程提升时调用 OpenProcess
,您将会成功。
或者,您可能能够以低于 PROCESS_QUERY_INFORMATION
的权限获得通过。这很难判断,因为我们不知道您要对这个进程句柄做什么。根据您的评论,您将根据要求 PROCESS_QUERY_INFORMATION
或 PROCESS_QUERY_LIMITED_INFORMATION
.
传递句柄 GetProcessImageFileName
,即 documented
对于 Delphi 10 Seattle,我使用此代码获取进程句柄:
uses
Winapi.Windows;
var
hp: THandle;
begin
hp := OpenProcess(PROCESS_QUERY_INFORMATION, False, ProcessID);
这适用于所有进程,包括 32 位和 64 位。
不幸的是,它不适用于 ELEVATED PROCESSES,它返回 0.
那么如何获取提升进程的进程句柄?
简单的回答是你不能这样做。系统说不行。当您调用 GetLastError
时,返回的值将为 ERROR_ACCESS_DENIED
。您的进程没有足够的权限获得 PROCESS_QUERY_INFORMATION
已提升的进程。
如果您在进程提升时调用 OpenProcess
,您将会成功。
或者,您可能能够以低于 PROCESS_QUERY_INFORMATION
的权限获得通过。这很难判断,因为我们不知道您要对这个进程句柄做什么。根据您的评论,您将根据要求 PROCESS_QUERY_INFORMATION
或 PROCESS_QUERY_LIMITED_INFORMATION
.
GetProcessImageFileName
,即 documented