如何判断一个进程句柄是否是当前进程的?
How to determine whether a process handle is of the current process?
我有一个 HANDLE
进程,它可能是也可能不是当前 运行 进程的句柄。以下是关于句柄对象的已知信息:
- 句柄只有
PROCESS_TERMINATE
访问权限。
- 句柄不是伪句柄,即不是
GetCurrentProcess
的 return 值。
有没有办法知道句柄是不是当前进程的?
我考虑过使用 GetProcessId
,但不幸的是它失败了,出现拒绝访问错误,因为句柄没有 PROCESS_QUERY_LIMITED_INFORMATION
访问权限。
如果您对目标进程有足够的访问权限,您可以使用 DuplicateHandle() 创建一个具有 PROCESS_QUERY_LIMITED_INFORMATION
访问权限的新句柄。然后您可以使用此句柄获取进程 ID。
除非您的进程修改自己的安全权限,否则它应该始终(至少)PROCESS_QUERY_LIMITED_INFORMATION
访问自己,因此如果复制句柄失败并出现拒绝访问错误,则句柄不太可能指向你的过程。
如果您想绝对确定,您可以尝试通过进程 ID 打开您的进程的句柄 - 如果失败,则有人在破坏 ACL,所有赌注都将取消。 :-)
我有一个 HANDLE
进程,它可能是也可能不是当前 运行 进程的句柄。以下是关于句柄对象的已知信息:
- 句柄只有
PROCESS_TERMINATE
访问权限。 - 句柄不是伪句柄,即不是
GetCurrentProcess
的 return 值。
有没有办法知道句柄是不是当前进程的?
我考虑过使用 GetProcessId
,但不幸的是它失败了,出现拒绝访问错误,因为句柄没有 PROCESS_QUERY_LIMITED_INFORMATION
访问权限。
如果您对目标进程有足够的访问权限,您可以使用 DuplicateHandle() 创建一个具有 PROCESS_QUERY_LIMITED_INFORMATION
访问权限的新句柄。然后您可以使用此句柄获取进程 ID。
除非您的进程修改自己的安全权限,否则它应该始终(至少)PROCESS_QUERY_LIMITED_INFORMATION
访问自己,因此如果复制句柄失败并出现拒绝访问错误,则句柄不太可能指向你的过程。
如果您想绝对确定,您可以尝试通过进程 ID 打开您的进程的句柄 - 如果失败,则有人在破坏 ACL,所有赌注都将取消。 :-)