如何禁止普通用户终止进程?

时间:2011-07-26 08:18:51

标签: c++ windows windows-7 process runas

我无法将其作为Windows服务实现,因为我的进程必须与桌面交互,并且在Windows 7中禁止它。

实现这一目标的最简单方法是什么?从另一个(特权)用户开始?怎么做?

我的用户不是黑客,只是操作员,所以一些“愚蠢”的方法,比如隐藏在任务管理器中也会有所帮助。

编辑:根据提供的答案进行一些澄清

我的进程没有任何GUI,所以我试图避免从任务管理器中删除进程

我的流程是监控系统的客户端,必须监控用户的桌面,因此必须与桌面进行交互

编辑2:

我可以使用Windows服务在系统帐户下的用户会话中启动单独的进程(因为我的服务在系统帐户下运行)?用户可以杀死这个子进程吗?

4 个答案:

答案 0 :(得分:2)

您可以disable the task manager使用组策略并隐藏应用程序窗口中的关闭按钮以及[Alt + F4]上的反应。

答案 1 :(得分:2)

经过长时间的挖掘,我在这里找到了可接受的答案:Prevent user process from being killed with "End Process" from Process Explorer

如果您以普通用户身份登录,则

正常工作,您无法从Process Explorer中终止该进程。管理员仍然可以杀死它,因为有足够的权限。这正是我所需要的

答案 2 :(得分:1)

关闭(根)窗口并不意味着停止进程 - 当消息泵循环存在时,您可以使用新窗口重新启动它(显然,如果您使用的是框架,那么可能有一个包装器)

但是如果用户拥有一个windows对象(如进程),他们总是可以删除(终止)它。但作为一个不同的用户运行,用户的凭据将需要以当前用户运行的启动器可访问的方式存储。

为了更具体地帮助我认为我们需要了解原因:

  

因为我的流程必须与桌面交互

是一项要求。

答案 3 :(得分:1)

从此MSDN blog


您就是这样做的:

通过调用

获取用户令牌
WTSQueryUserToken (WTSGetActiveConsoleSessionId (), &hToken) ;     

在CreateProcessAsUser中使用此标记。


您只需要从服务中调用WTSQueryUserToken,然后启动该过程 - 它也适用于Windows 7!