如何确定进程句柄是否属于当前进程?

时间:2015-06-13 15:35:11

标签: windows winapi

我有一个HANDLE进程,可能是也可能不是当前正在运行的进程的句柄。以下是有关句柄对象的知识:

  1. 句柄只有PROCESS_TERMINATE访问权限。
  2. 句柄不是伪句柄,即不是GetCurrentProcess的返回值。
  3. 有没有办法知道句柄是否属于当前流程?

    我考虑过使用GetProcessId,但遗憾的是它因访问被拒绝错误而失败,因为句柄没有PROCESS_QUERY_LIMITED_INFORMATION访问权限。

1 个答案:

答案 0 :(得分:1)

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

除非您的进程修改自己的安全权限,否则它应始终(至少)PROCESS_QUERY_LIMITED_INFORMATION访问自身,因此如果重复处理失败且访问被拒绝错误,则句柄不太可能指向您的进程

如果你想绝对肯定,你可以尝试按进程ID打开进程的句柄 - 如果失败那么有人正在搞乱ACL并且所有的赌注都已关闭。 : - )