c++ - 使应用程序/服务试图在任务管理器中结束/终止其进程将导致 "Unable to Terminate Process"

标签 c++ windows winapi windows-7

我有一个 Avast 防病毒软件,它有一个进程“AvastSvc.exe”。如果我尝试在 Windows 任务管理器中结束/终止该进程,则会出现一个包含以下消息的窗口:“无法终止进程”、“操作无法完成”、“访问被拒绝”。尝试结束某些系统 Windows 进程(如 winlogon.exe)可能会出现相同的行为(尽管有一次我设法杀死 winlogon.exe 并让我的机器挂了!)。

我希望我的应用程序(可能转换为服务)以相同的方式运行。我该怎么做?

Disable Windows Task Manager so he cant kill my process是一个类似的问题,有很多有趣的答案,但它们似乎没有采用上述防病毒软件使用的技术并导致“无法终止进程”消息。

http://forums.codeguru.com/showthread.php?t=503337有一个关于如何防止停止服务的解决方案(例如,通过 services.msc 控制台),但我需要防止结束/杀死它在任务管理器中的进程。

我在 Windows 7 下用 C++/winapi 编写应用程序,没有 CLR/.Net。

权限更新: 防病毒进程 AvastSvc.exe 由“系统”帐户拥有。但是,我有“系统”帐户拥有的其他进程,它们是可杀死的,而防病毒软件则不是。此外,我比较了防病毒进程和可终止进程的可执行权限和所有者,没有发现任何区别。

有关用户控制和软件用途的更新: 软件功能介于系统软件和业务软件之间。软件的性质要求它永久运行。该应用程序本身将有一个“关闭”操作,我们希望鼓励用户使用它并阻止他们终止进程(这类似于杀毒软件所做的)。我知道不可能完全阻止用户杀死它,但我想让它变得更难。这个问题特别是关于某些服务(如 Avast)用来防止终止其进程的上述方式(“无法终止进程”)。实现相同的行为对我来说就足够了。此外,如果用户不喜欢/不再需要它,他们将能够卸载该软件。

最佳答案

这不是通过代码实现的(好吧,它可能用于关键的 Windows 系统进程,但您 [可能] 不是在编写操作系统的组件),而是通过访问权限实现的。

您可以通过提升为管理员然后尝试终止 Avast 的进程来证明这一点。这次应该会成功。或者,您可以获取可执行文件(可能还有它所在的文件夹)的所有权,然后尝试终止该进程。同样,它应该会成功。

Windows 不允许应用程序对计算机施加比用户更大的权力。如果您拥有这台机器并拥有适当的权限,您可以做任何您想做的事情,包括终止正在运行的进程。值得庆幸的是,作为开发人员,您无法阻止它。

用户始终拥有最终控制权。试图创造一种替代情况是一场病毒和其他恶意软件开发者经常打的仗——而且输了。由于我对帮助任何人编写恶意软件不感兴趣,所以这就是我要说的。

除了编写恶意软件之外,我无法想象在应用程序中使用此“功能”的最初动机是什么。如果您只是想防止普通用户终止对业务系统至关重要的进程,那么您应该降低标准用户帐户的权限,这样他们就无法篡改这些东西。因此,这可能是组策略的工作,而不是代码。

关于c++ - 使应用程序/服务试图在任务管理器中结束/终止其进程将导致 "Unable to Terminate Process",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10494654/

相关文章:

c++ - 类构造函数中的 OpenGL sigsegv 错误

windows - 隐藏端口并将http加密为https

delphi - 如何检查表单关闭按钮的状态(启用/禁用)

c++ - 将标准输出重定向到父进程控制台窗口

c++ - Solaris 上的 GCC - 在 `0x00000002' 之前解析错误

c++ - 指向成员函数的指针作为全局函数的参数

c++ - 尝试在 C++ 中减少设计模式

windows - Windows 的替代 bash/或在 cygwin 上帮助完成特定任务

windows - Windows 是否有任何内置实用程序来编码/解码 URL?

c++ - 通过 WinAPI 提取字体版本