如何为Windows编写一个不可驱动的进程?

我正在寻找一种方法来编写一个应用程序。 我使用Visual C ++ 6.0。

我需要阻止用户通过任务pipe理器closures这个过程。

Solutions Collecting From Web of "如何为Windows编写一个不可驱动的进程?"

你不能这样做。

雷蒙德陈为什么这是一个坏主意:

http://blogs.msdn.com/oldnewthing/archive/2004/02/16/73780.aspx

你可以做一个不可动摇的过程,但是它不可能完成任何有用的功能。 例如,使进程无法运行的一种方法是让它向一个永远不能完成的驱动程序发出同步I / O请求(例如,通过故意写一个错误的驱动程序)。 内核不会允许进程终止,直到I / O请求完成。

所以,有些人说“你做不到”是不正确的。 但是你不想要。

这一切都取决于谁不应该能够杀死这个过程。 您通常有一个交互式登录的用户。 在这种情况下运行进程将允许用户杀死它。 这是她的过程,所以她可以杀死它,这里没有什么惊喜。

如果您的用户的权限有限,您可以随时以其他用户的身份启动该进程。 用户不能杀死属于另一个用户的进程(管理员除外),这里也不奇怪。

你也可以尝试使用本地系统权限来运行你的进程,我认为即使是管理员也不能杀死它(尽管他可以获得许可,iirc)。

总的来说,这是一个非常糟糕的主意。 你的过程并不拥有这台机器,用户呢。 在我知道的计算机上唯一不可驱动的进程是操作系统,正确的是。 你必须确保你不能占用资源(因为你不能被释放而不能释放)和其他恶意的副作用。 通常这样的东西不是正常的应用程序的领域,他们应该远离这个原因。

取决于用户权限。 如果以管理员身份运行该程序,则普通用户将没有足够的权限来终止进程。 如果管理员试图杀死这个进程,他在大多数情况下会成功。 如果你真的想要别人杀了你,你应该看看windows系统服务和驱动程序开发。 在任何情况下,请注意,如果用户不能杀死一个进程,那么即使它表现异常,也会出现错误! 你会发现这些程序/例子在法律上的巨大财富! 网站rootkit.com 。 请尊重用户。

我从恶意软件学到的东西:

  • 创建一个自己产生一打的进程
  • 每次你发现一个人失踪(被杀害)的时候,都会产生一打。
  • 每一个应该是一个独特的进程名称,以便批处理不能轻易地通过名称来杀死所有的进程名称
  • 按顺序关闭并重新启动一些进程,以保持pid的变化,这也会阻止批处理

几十年来这是一个Win32常见问题解答。 查看Google网上论坛和Und。 众所周知的方法板(钩CS和其他…)
Noobs回答“你不能这样做”对Win32编程一无所知:你可以用Win32 API来做任何事情

没有一个100%的万无一失的方法,但应该可以通过这种方式来保护流程。 不幸的是,它需要比我现在更多的Windows安全系统API知识,但其原理很简单:让应用程序在不同的(管理员)帐户下运行,并将过程对象的安全属性设置为最大。 (拒绝所有其他用户关闭进程的权限,因此只有特殊管理员帐户才能关闭该进程。)设置辅助服务并使其作为进程监视器运行。 它应该有一个受保护应用程序的生命线,当这个生命线被切断(应用程序关闭)时,它应该重新启动该过程。 (这条生命线可以是任何一种进程间的通信。)尽管如此,仍然有办法杀死这种不可驱动的进程。 但是,这确实需要大多数用户并不真正了解的知识,所以大约85%的用户不会有任何线索来阻止您的流程。

请记住,创建这样的应用程序可能会有法律后果。 例如,索尼创建了一个rootkit应用程序,当人们在他们的电脑中插入索尼音乐CD或游戏光盘时,自动安装它。 这是他们DRM解决方案的一部分。 不幸的是,杀死这个应用程序非常困难,并且没有任何警告地被安装到用户手中。 更糟糕的是,它有一些弱点,会给黑客提供更多的途径来获得这些系统,从而使其中的一小部分受到感染。 索尼必须赔偿相当多的人的损失,并支付巨额罚款。 (然后我甚至不会提到它对声誉的影响。)

我认为这样的应用程序只有在你自己的计算机上安装时才是合法的。 如果您打算将此应用程序出售给其他人,则必须告诉这些买方如何杀死该进程。 我知道赛门铁克正在做一些类似于他们的软件,这正是我为什么不再使用他们的软件。 这是我的电脑,所以我应该可以杀死我喜欢的任何进程。

这里解释: http : //blogs.technet.com/b/markrussinovich/archive/2005/08/17/unkillable-processes.aspx

世界上最古老的想法,两个互相重生的过程?

我只是偶然发现了这个帖子,试图找到解决我自己的(无意的)无法解决的过程问题。 也许我的问题将是你的解决方案。

  1. 使用jboss Web Native安装一个将运行批处理文件的服务(修改service.bat以便调用你自己的批处理文件)
  2. 在你自己的批处理文件中,调用一个java进程来执行任何你想要保存的任务
  3. 开始服务。 如果您在进程浏览器中查看进程,则生成的树将如下所示:

jbosssvc.exe – > cmd.exe – > java.exe

  1. 从管理命令提示符使用taskkill来杀死cmd.exe。 Jbosssvc.exe将会终止,并且java.exe将会是一个孤立的正在运行的进程(据我所知)不能被终止。 到目前为止,我已经尝试过Taskmanager,进程管理器(以管理员身份运行)和taskkill无济于事。

免责声明:与其他人一样,这样做是个好主意的例子很少。