我们现在正在从客户端启动一个新的自定义项目,其中一个要求是除非系统正在关闭,重新启动或注销,否则无法终止该过程。
此应用程序监控USB接口。我们将使用WMI定期查询设备。
客户端希望在Windows XP操作系统上运行应用程序,而不喜欢安装.NET。所以我们将Visual Basic 6作为我们的语言。
我主要担心的是这个应用程序无法终止。我们的项目顾问谈论反病毒,是的,一些反病毒无法终止。我正在考虑如何在Visual Basic 6中执行相同操作。我知道项目中将涉及API,但我应该去哪里?所以API也适合我。
我看到一些文章将EXE转换为SERVICE,在Visual Basic 6中创建Windows服务等。
所以请分享你的想法。
答案 0 :(得分:2)
如果你想成为邪恶,你可以调用(官方)未记录的RtlSetProcessIsCritical
NTDLL函数。如果您的流程终止,这将立即BSOD机器。
答案 1 :(得分:2)
如果没有某种内核模式挂钩,你就无法创建一个无法终止的进程,这涉及到编写驱动程序。如果您对此感兴趣,可能需要查看 Rootkits:颠覆Windows内核。但是,即使使用内核模式挂钩,仍有许多方法可以终止进程。另一种方法是使用用户模式挂钩,轻松绕过,但足以用于非常简单的项目。
您要使用的解决方案取决于您希望使用终止保护的程度。即使您成功阻止了流程终止,也可能存在阻止您的应用程序正常工作的方法 - 例如杀死WMI服务。
答案 2 :(得分:0)
我想你想看一下NT服务。
此处有更多信息:http://www.montgomerysoftware.com/CreatinganNTServiceinVisualBasic6/tabid/161/language/en-US/Default.aspx link text
答案 3 :(得分:0)
现在在VB6编写真的很令人沮丧,特别是我把头放在C#中2年了,虽然我用VB6编写了5年代。
退回是一种痛苦,好像我正在开始一种新的编程语言。
答案 4 :(得分:0)
老实说,你正试图在VB6中做一些事情,它真的不是那么棒。 当你说'不能被终止'时 - 你的意思是什么?那里有几个层次: a)应用程序显示一个窗口,但用户无法使用X按钮关闭它,或者它没有显示一个窗口 b)应用程序显示没有窗口或可能位于任务托盘中 c)应用程序显示没有窗口,无法从任务管理器的“应用程序”选项卡关闭 d)无法从任务管理器的进程列表中关闭应用程序
(a)和(b)可能是直接VB中最容易做到的。 (c)仍有可能,但变得更加丑陋。 (d)让你进入黑客领域,如果你管理它,几乎肯定会被贬低。
如果你真的需要阻止用户关闭那么你可能会或多或少地破解它,但真正的答案就像其他人所说的那样 - 系统服务(这正是他们打算用的东西) )。然而,这是VB6不擅长的一件事,因此解决问题的最佳方法是c#。