在 Delphi 10 Seattle 中,我使用以下代码获取进程的句柄:
uses
Winapi.Windows;
var
hp: THandle;
begin
hp := OpenProcess(PROCESS_QUERY_INFORMATION, False, ProcessID);
这适用于所有进程,包括32位和64位。
然而,在提升的进程中不起作用,它会返回0。
那么如何获取提升进程的进程句柄?
在 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
。GetProcessImageFileName
获取进程文件路径。那么有没有其他方法可以获取提升后的进程的文件路径呢? - user1580348PROCESS_QUERY_LIMITED_INFORMATION
($1000)而不是PROCESS_QUERY_INFORMATION
时,它可以工作!然后我可以使用GetProcessImageFileName
获取提升进程的完整路径! - user1580348PROCESS_QUERY_LIMITED_INFORMATION
在 Winapi.Windows
或 RTL 的任何其他地方似乎都没有定义。但是,值 $1000
似乎是正确的。 - user1580348
如果函数失败,则返回值为NULL。要获取扩展错误信息,请调用GetLastError。
- Tom Brunberg