使用 Delphi 10 Seattle,我使用以下代码来获取进程的句柄:
uses
Winapi.Windows;
var
hp: THandle;
begin
hp := OpenProcess(PROCESS_QUERY_INFORMATION, False, ProcessID);
这适用于所有进程,包括 32 位和 64 位。
不幸的是,它不适用于提升的进程,在那里它返回 0。
那么,如何获取提升的进程的进程句柄呢?
简单的答案是你不能这样做。系统说没有。调用GetLastError
时返回的值将为ERROR_ACCESS_DENIED
。您的进程没有足够的权限来获得对提升流程PROCESS_QUERY_INFORMATION
。
如果您在流程提升时调用OpenProcess
,您将成功。
或者,您可能能够以低于PROCESS_QUERY_INFORMATION
的权利过日子。这很难判断,因为我们不知道你的意思是用这个进程句柄做什么。根据您的意见,您将传递句柄GetProcessImageFileName
该句柄被记录为需要PROCESS_QUERY_INFORMATION
或PROCESS_QUERY_LIMITED_INFORMATION
。