如何阻止其他进程终止我的服务?

时间:2012-12-04 12:26:49

标签: delphi windows-services

我有一个Windows服务,可以为我的应用程序执行各种“工作”(发送电子邮件,创建备份,检查我的应用程序更新,提供一些服务......)

最近,一些客户报告了使用某些网上银行网站和我的应用程序之间的问题。

在搜索解决方案时,我发现有关网上银行网站安装的插件(ActiveX)的报告。

此ActiveX安装了一个奇异的服务(来自GAS Tecnologia的GbPlugin),该服务基于一些白痴启发式杀死可疑应用程序,我的服务是受害者!

现在我正试图“免疫”我的服务。

是否有一些方法可以限制我的服务终止以保护它?

我不能在服务属性中使用“自动重启”选项,因为我无法被杀!

两个服务都以LOCALSYSTEM身份运行。

2 个答案:

答案 0 :(得分:4)

很可能该服务以LOCALSYSTEM运行,因此可以杀死它喜欢的任何内容。所以你极不可能防御它。

实际上,快速网络搜索引发了一些点击,表明该服务确实以LOCALSYSTEM运行。

您唯一可行的解​​决方案是涉及其他软件。要么强迫您的用户将其删除,要么与其开发人员合作以找到将程序列入白名单的方法。

答案 1 :(得分:2)

假设GbPlugin正在通过正常的SCM程序来停止服务,而不仅仅是暴力终止它们,那么你有几个选择来阻止你的服务停止:

  1. 将您服务的AllowStop媒体资源设为False。

  2. OnStop事件中
  3. ,将Stopped参数设置为False。

  4. 任何一种方法都会阻止您在正常情况下停止自己的服务。要解决此问题,您可以编写一个单独的应用程序,该应用程序使用Win32 API ControlService()函数向您的服务发送自定义命令。在您的服务中,让它覆盖虚拟DoCustomControl()方法以查找该命令。让它将AllowStop属性重置为True,或者在OnStop事件可以查看的位置设置标记,然后调用Controller(SERVICE_CONTROL_STOP)以启动正常停止。

    毋庸置疑,这有点矫枉过正。如果可能,更好的选择是简单地联系GAS Tecnologia并询问为什么您的服务被GbPlugin的启发式标记,然后在您的服务中更改该条件,或者要求他们修复GbPlugin以忽略您的服务。