如何禁止普通用户终止进程
how to forbid process termination by regular user?
我不能将它实现为windows服务,因为我的进程必须与桌面交互,而这在windows 7中是被禁止的。
最简单的方法是什么?在另一个(特权)用户下启动?如何做到这一点?
我的用户不是黑客,只是一个操作员,所以一些"愚蠢"的方法,如隐藏任务管理器也会有所帮助。
编辑:根据提供的答案进行一些澄清
我的进程没有任何GUI,所以我试图避免在任务管理器
中杀死进程我的进程是一个监控系统的客户端,它必须监控用户的桌面,所以它必须与桌面交互
编辑2:我可以使用一个windows服务,它将在系统帐户下的用户会话中启动单独的进程(因为我的服务在系统帐户下运行)?用户可以终止该子进程吗?
您可以使用组策略禁用任务管理器,并隐藏应用程序窗口的关闭按钮和[Alt+F4]的反应
经过长时间的挖掘,我在这里找到了可以接受的答案:防止用户进程被"End process "from Process Explorer
如果您以普通用户身份登录,可以正常工作,您不能从进程资源管理器中杀死该进程。管理员仍然可以杀死它,因为有足够的权限。这正是我所需要的
关闭(根)窗口并不意味着停止进程-当消息泵循环存在时,您可以通过一个新窗口重新启动它(显然,如果您正在使用框架,可能会有一个包装器)。
但是如果用户拥有一个windows对象(比如一个进程),他们总是可以删除(终止)它。但是作为一个不同的用户运行,该用户的凭据将需要以一种可以被当前用户运行的启动器访问的方式存储。
为了帮助更具体,我认为我们需要理解为什么:
因为我的进程必须与桌面
交互
From this MSDN blog:
你应该这样做:
通过调用
获取用户令牌WTSQueryUserToken (WTSGetActiveConsoleSessionId (), &hToken) ;
在CreateProcessAsUser中使用这个令牌。
你只需要从你的服务中调用WTSQueryUserToken
,并启动进程-它也适用于Windows 7 !
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- C++如何通过用户输入删除列表元素
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何使用用户输入在C++中正确填充2D数组
- C++MySQL C api用户输入行
- 使用用户定义函数的字符串反转
- 用户定义函数中的指针和输入
- 为什么即使使用-cudart-static进行编译,库用户仍然需要链接到cuda运行时
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 如何只允许用户输入正整数
- 代码在执行之前终止,并且没有从用户那里获取输入
- 用户定义的字符串文字为字符串null终止
- 在没有程序的情况下询问用户相同的事情被终止 C++
- 当用户输入 -1 时,它应该终止
- 需要帮助以在未经用户同意的情况下停止程序终止
- 如何使用 c++ 代码终止在不同用户下运行的进程
- 共享库中的内部异常终止最终用户应用程序
- 用户的空终止输入
- 如何防止普通用户终止进程
- 如何禁止普通用户终止进程