C++ 如何为Windows编写一个不可修改的进程?

C++ 如何为Windows编写一个不可修改的进程?,c++,windows,C++,Windows,我正在寻找一种编写应用程序的方法。我用Visual C++ 6。< /P> 我需要阻止用户通过任务管理器关闭此进程。您不能这样做。这取决于谁不能终止该进程。通常有一个用户以交互方式登录。在该上下文中运行该进程将允许用户终止它。这是她的过程,所以她可以杀死它,这并不奇怪 如果您的用户权限有限,则始终可以作为其他用户启动该进程。用户不能终止属于另一个用户(管理员除外)的进程,这也不足为奇 您还可以尝试让您的进程以本地系统权限运行,我认为即使是管理员也无法杀死它(即使他可以获得这样做的权限,iirc)

我正在寻找一种编写应用程序的方法。我用Visual C++ 6。< /P>
我需要阻止用户通过任务管理器关闭此进程。

您不能这样做。

这取决于谁不能终止该进程。通常有一个用户以交互方式登录。在该上下文中运行该进程将允许用户终止它。这是她的过程,所以她可以杀死它,这并不奇怪

如果您的用户权限有限,则始终可以作为其他用户启动该进程。用户不能终止属于另一个用户(管理员除外)的进程,这也不足为奇

您还可以尝试让您的进程以本地系统权限运行,我认为即使是管理员也无法杀死它(即使他可以获得这样做的权限,iirc)


但总的来说,这是一个非常糟糕的主意。您的进程不拥有机器,用户拥有。我所知道的计算机上唯一无法推理的过程就是操作系统,这是正确的。你必须确保你不能占用资源(因为你不可更改,所以不能释放)和其他恶意的副作用。通常,这类内容不是普通应用程序的领域,它们应该远离这一领域,这是有原因的。

取决于用户的权限。如果您以管理员身份运行该程序,普通用户将没有足够的权限终止您的进程。如果管理员试图终止进程,在大多数情况下他都会成功。如果你真的不想有人杀死你的进程,你应该看看windows系统服务和驱动程序开发。在任何情况下,请注意,如果一个用户不能杀死一个进程,他就会被它卡住,即使它的行为由于bug而异常!您将在法律网站上找到大量此类程序/示例!地点。请尊重用户。

您可以创建一个不可修改的流程,但它无法在不可修改的情况下完成任何有用的事情。例如,使进程不可修改的一种方法是让它向永远无法完成的驱动程序发出同步I/O请求(例如,故意编写有缺陷的驱动程序)。在I/O请求完成之前,内核不允许进程终止


所以,正如一些人所说,你“做不到”这一说法并不完全正确。但是你无论如何也不想这样做。

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

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


当你把它安装到你自己的计算机上时,我会认为这样的申请是合法的。如果您计划将此应用程序出售给其他人,则必须告诉这些买家如何终止此过程(如果需要)。我知道赛门铁克在他们的软件上也做了类似的事情,这正是我不再使用他们软件的原因。这是我的电脑,所以我应该可以杀死任何我喜欢的进程。

这是一个几十年来的Win32常见问题解答。请参阅谷歌集团和Und。著名方法的电路板(连接cs和其他…)

回答“你做不到”的Noobs对Win32编程一无所知:你可以用Win32 api做任何事情……

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

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

  • 创建一个进程,该进程本身会产生十几个进程
  • 每次你发现有一个丢失了(它被杀死了),就会产生更多的卵
  • 每一个都应该是唯一的进程名,这样批处理进程就不能轻易地按名称杀死所有这些进程
  • 按顺序关闭并重新启动某些进程,以保持PID的更改,这也将防止批处理终止

我在试图找到解决我自己(无意中)无法解决的流程问题的方法时,偶然发现了这篇文章。也许我的问题就是你的解决方案

  • 使用jboss Web Native安装将运行批处理文件的服务(修改service.bat,使其调用您自己的批处理文件)
  • 在您自己的批处理文件中,调用一个java进程,该进程执行您希望持久化的任何任务
  • 启动服务。如果在process explorer中查看流程,则生成的树将如下所示:
  • jbosssvc.exe->cmd.exe->java.exe

  • 在管理命令提示符下使用taskkill杀死cmd.exe。Jbosssvc.exe将终止,而java.exe将是孤立的运行进程