制作应用程序/服务,试图结束/终止任务pipe理器中的进程将导致“无法终止进程”

我有一个Avast杀毒软件,它有一个进程“AvastSvc.exe”。 如果我尝试在Windows任务pipe理器中结束/终止该进程,则将显示一个窗口,其中显示以下消息:“无法终止进程”,“操作无法完成”,“访问被拒绝”。 试图结束一些系统的Windows进程(如winlogon.exe)可能具有相同的行为(尽pipe一旦我设法杀死winlogon.exe,并让我的机器被绞死!)。

我希望我的应用程序(可能转换为服务)的行为方式相同。 我怎样才能做到这一点?

禁用Windows任务pipe理器,所以他不能杀死我的过程是一个类似的问题,有许多有趣的答案,但他们似乎并没有function上述防病毒所使用的技术,并导致“无法终止进程”消息。

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

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

更新权限:防病毒进程AvastSvc.exe由“系统”帐户拥有。 但是,我有其他的“系统”帐户拥有的进程,他们是可以杀毒和防病毒不是。 另外,我比较了可执行权限和防病毒进程的所有者以及可执行进程的可执行权限,我没有看到任何区别。

用户控制和软件用途的更新:软件function位于系统和业务软件之间。 软件的性质要求它永久运行。 应用程序本身将有一个“closures”的行动,我们希望鼓励用户使用它,并阻止他们杀死进程(它类似于什么防病毒软件)。 我明白,不可能完全阻止用户杀死它,但我想让它更难。 这个问题具体是关于上面描述的方式(“无法终止进程”),一些服务(如Avast)使用这些服务来防止终止进程。 对我来说,只要达到同样的行为就足够了。 而且,用户只要不喜欢/不再需要,就可以卸载软件。

Solutions Collecting From Web of "制作应用程序/服务,试图结束/终止任务pipe理器中的进程将导致“无法终止进程”"

这不是通过代码实现的(当然,这可能是关键的Windows系统进程,但是你可能不是编写操作系统的组件),而是通过访问权限。

你可以通过升级到Administrator来证明这一点,然后尝试杀死Avast的进程。 它应该这次成功。 或者,您可以获取可执行文件(可能位于其所在的文件夹)的所有权,然后尝试终止该进程。 再次,它应该是成功的。

Windows不允许应用程序比用户对计算机施加更多的权力。 如果您拥有机器并拥有适当的权限,则可以执行任何您想要的操作,包括终止正在运行的进程。 谢天谢地,作为一个开发人员,你是无法阻止这个的。

用户始终处于最终控制之中。 试图创造另一种情况是病毒和其他恶意软件开发者经常性地战斗和失败的一场战斗。 由于我不想帮助任何人编写恶意软件,这就是我要说的。

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

我发现在阻止用户进程中提供的函数ProtectProcess() 被Process Explorer中的“End Process”所杀死,其结果完全是我正在寻找的效果。

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