如何判断一个进程句柄是否是当前进程的?

How to determine whether a process handle is of the current process?

我有一个 HANDLE 进程,它可能是也可能不是当前 运行 进程的句柄。以下是关于句柄对象的已知信息:

  1. 句柄只有PROCESS_TERMINATE访问权限。
  2. 句柄不是伪句柄,即不是 GetCurrentProcess 的 return 值。

有没有办法知道句柄是不是当前进程的?

我考虑过使用 GetProcessId,但不幸的是它失败了,出现拒绝访问错误,因为句柄没有 PROCESS_QUERY_LIMITED_INFORMATION 访问权限。

如果您对目标进程有足够的访问权限,您可以使用 DuplicateHandle() 创建一个具有 PROCESS_QUERY_LIMITED_INFORMATION 访问权限的新句柄。然后您可以使用此句柄获取进程 ID。

除非您的进程修改自己的安全权限,否则它应该始终(至少)PROCESS_QUERY_LIMITED_INFORMATION 访问自己,因此如果复制句柄失败并出现拒绝访问错误,则句柄不太可能指向你的过程。

如果您想绝对确定,您可以尝试通过进程 ID 打开您的进程的句柄 - 如果失败,则有人在破坏 ACL,所有赌注都将取消。 :-)