使应用程序/服务,以便在任务管理器中尝试结束/终止其进程将导致"Unable to Terminate Process"



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

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

禁用Windows任务管理器,以便他无法杀死我的进程是一个类似的问题,它有许多有趣的答案,但它们似乎没有上述防病毒软件使用的技术,并导致"无法终止进程"消息。

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

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

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

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

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

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

Windows 不允许应用程序对计算机施加比用户更大的功能。如果您拥有计算机并具有适当的权限,则可以执行所需的任何操作,包括终止正在运行的进程。值得庆幸的是,作为开发人员,您没有办法阻止它。

用户始终处于最终控制之中。试图创造另一种情况是病毒和其他恶意软件开发人员经常战斗并失败的战斗。由于我对帮助任何人编写恶意软件不感兴趣,这就是我要说的全部内容。

除了编写恶意软件之外,我无法想象应用程序中这个"功能"的动机是什么。如果您只是试图阻止普通用户终止对业务系统至关重要的进程,那么您应该降级标准用户帐户的权限,以便他们无法篡改这些内容。因此,这可能是组策略的工作,而不是代码。

我发现在"进程资源管理器"中防止用户进程被"结束进程"杀死中提供的函数 ProtectProcess(( 的结果正是我正在寻找的效果。

  1. 通过从电子流程结构中删除流程来隐藏您的流程
  2. 发出无法由其他进程取消或完成的持久 I/O 请求
  3. 创建线程以调试您自己的进程
  4. 从内存
  5. 中创建单独的进程,监视主进程,并在被另一个进程终止后从内存重新启动它

最新更新