如果我创建了一个进程,是否意味着我将始终能够终止它?

时间:2015-05-25 21:00:14

标签: c++ c windows winapi process

比如说,如果我使用CreateProcessCreateProcessAsUser API创建了一个进程,这是否意味着无论我的主机在什么上下文中,调用TerminateProcess (PROCESS_INFORMATION.hProcess)都会终止该进程进程正在运行(低权限用户,内置Guest等)?

1 个答案:

答案 0 :(得分:4)

我还没有对它进行测试,但根据文档,您应该始终能够使用PROCESS_INFORMATION中返回的句柄成功终止进程。在Windows安全模型中,通常仅针对正在使用的句柄检查权限,而不是其他任何内容。根据{{​​3}}上的MSDN文档:

  

CreateProcess函数返回的句柄具有 PROCESS_ALL_ACCESS 访问过程对象的权限。

CreateProcessAsUser的文档支持以下内容:

  

在这种情况下,此安全描述符可能不允许调用者访问   运行后可能无法再次打开该进程。进程句柄是   有效且将继续拥有完全访问权限。

TerminateProcess文档中唯一的权限要求是:

  

句柄必须具有 PROCESS_TERMINATE 访问权限。

因此,CreateProcess和CreateProcessAsUser返回的任何句柄都应具有必要且足够的访问权限,以允许使用TerminateProcess终止新进程。