使用Delphi 10 Seattle,我使用此代码来获取进程的句柄:
uses
Winapi.Windows;
var
hp: THandle;
begin
hp := OpenProcess(PROCESS_QUERY_INFORMATION, False, ProcessID);
这适用于32位和64位的所有进程。
不幸的是,它不适用于ELEVATED PROCESSES,它会返回 0 。
那么如何才能获得升级过程的流程处理?
答案 0 :(得分:3)
简单的答案是你不能这样做。系统说没有。当您致电GetLastError
时,返回的值将为ERROR_ACCESS_DENIED
。您的流程没有足够的权利获得PROCESS_QUERY_INFORMATION
升级的流程。
如果您的流程提升时调用OpenProcess
,则会成功。
或者,您可能能够获得比PROCESS_QUERY_INFORMATION
更低的权利。这很难判断,因为我们不知道你对这个过程句柄的意思。根据您的评论,您将GetProcessImageFileName
传递PROCESS_QUERY_INFORMATION
,因为需要PROCESS_QUERY_LIMITED_INFORMATION
或cout << pointer2 << endl;
cout << pointer << endl;
。