如何获取提升进程的进程句柄?

问题描述 投票:0回答:1

在 Delphi 10 Seattle 中,我使用此代码来获取进程的句柄:

uses
  Winapi.Windows;

var
  hp: THandle;
begin
    hp := OpenProcess(PROCESS_QUERY_INFORMATION, False, ProcessID);

这适用于所有进程,32 位和 64 位。

不幸的是,它不适用于提升的进程,它会返回0

那么如何获取提升进程的进程句柄呢?

delphi winapi delphi-10-seattle
1个回答
5
投票

简单的答案是你不能这样做。系统说不行。当您调用

GetLastError
时,返回的值将为
ERROR_ACCESS_DENIED
。您的进程没有足够的权限来获得
PROCESS_QUERY_INFORMATION
到提升的进程。

如果您在进程提升时拨打

OpenProcess
,您将会成功。

或者,您可能可以使用比

PROCESS_QUERY_INFORMATION
更低的权限。这很难判断,因为我们不知道你想用这个进程句柄做什么。根据您的评论,您将把句柄传递给
GetProcessImageFileName
,这是 记录,需要
PROCESS_QUERY_INFORMATION
PROCESS_QUERY_LIMITED_INFORMATION

© www.soinside.com 2019 - 2024. All rights reserved.