Delphi 7 - 防止用户在任务管理器中杀死进程

Posted

技术标签:

【中文标题】Delphi 7 - 防止用户在任务管理器中杀死进程【英文标题】:Delphi 7 - Prevent User From Killing Process in Task Manager 【发布时间】:2015-04-24 16:39:06 【问题描述】:

下面的代码可以防止应用程序通过 Windows 任务管理器被杀死:

SetSecurityInfo(OpenProcess(PROCESS_ALL_ACCESS, False, GetCurrentProcessID),
  SE_KERNEL_OBJECT, DACL_SECURITY_INFORMATION, nil, nil, @ACL, nil);

它仅适用于 Windows 7 的问题。所以,我有两个问题:

您知道如何调整同样适用于 XP 和 8 的代码(或其他方法)吗?

我怎样才能让用户在阻止他们这样做一次后终止进程?我想包含一个选项(复选框),例如:“防止用户杀死应用程序”,可以选中或不选中。

顺便说一句,我没有创建任何类型的病毒、恶意软件、间谍软件等。

【问题讨论】:

为此使用服务。如果用户坚持要杀死他们的服务,那就是它。无法杀死的第三方程序/服务是恶意软件。 正如所写,您正在尝试解决错误的问题。问题不是你如何阻止他们关闭你的软件——问题是他们为什么要关闭你的软件——而是解决这个问题(这可能不是软件修复)。 @Xepol,你是对的。也许我建议经理聘请一位心理学家来尝试了解为什么有些员工只是停止工作以与我的... :) 也许进行集体治疗...顺便说一句,我应该参加...: ) @Paruba:不,也许你应该和那些用户谈谈,找出为什么你的软件正在做他们非常不喜欢的事情,他们觉得有必要停止它,然后修复你的软件,让它不起作用那不再。大多数用户停止他们没有积极使用的软件是因为它给他们带来了问题或表现不佳。 @Paruba 好吧,我是巴西人,我的客户不会杀死我的应用程序。这根本没有意义。也许您的应用正在做一些有害的事情。为什么客户会杀死一个有用的应用程序?为什么他/她必须为此使用任务管理器? 【参考方案1】:

你不能,有一个很好的理由:即使你没有创建恶意软件,如果你可以的话,恶意软件作者也可以。

此外,总而言之,计算机的所有者拥有计算机,并对计算机的运行方式拥有最终决定权。 This is a deliberate design decision in Windows, 根据 Windows 团队的主要开发人员之一 Raymond Chen 的说法。如果您的软件试图立即采取该基本原则,那么计算机的所有者会将您的软件视为恶意软件,无论您是否有意。

你真的应该听那些发布 cmets 的人的意见。人们不会无缘无故地做事。如果您的用户正在杀死该进程,那么问题不是“该进程可以在不应该被杀死的时候被杀死”;问题是“你的进程正在做一些让人们想要杀死它的事情。”您遇到的是社会问题,而不是技术问题,经验表明,试图通过技术手段解决社会问题总是会使事情变得更糟。

尝试与您的用户交谈并弄清楚是什么让他们如此想终止您的流程,看看您是否可以解决任何问题并改善他们的体验。但是不要试图让这个过程变得无法杀死。这是一场你不想参加的军备竞赛,因为最终你总是会输。

【讨论】:

我知道许多软件,例如防病毒和安全应用程序,可以防止进程被杀死。您需要了解公司经理要求我添加此功能,并征得所有者同意。计算机属于公司,而不是雇员(用户)。无论如何,我已经厌倦了和你争论......祝你有美好的一天! 你能取消他们在windows中访问任务管理器的权限吗,这将解决你的问题而无需使用代码,我假设它可以使用windows用户权限的东西来完成? @Shaun 我可以在不使用任务管理器的情况下终止进程。此外,任务管理器还有其他用途。 @Paruba 我可以禁用我的 AV 软件。 @paruba 你从这里的人那里得到了很好的建议。忽略它会有危险,因为最终管理者会开始询问如果人们继续禁用它,软件的意义何在。找到根本原因,解决它。或者你的经理会。​​span> 【参考方案2】:

你可以做到的。

查看关于安全 StackExchange 的规范答案:

Create a unterminable process in Windows

短版:

    Pre-NT RegisterServiceProcess 技巧 - 将您的进程标记为 “关键系统服务” 进程命名技巧 - TaskMgr 拒绝终止名为 rpcss.exe 的进程 Keep-alive 进程 - 两个进程不断相互重新启动 用户模式挂钩 TerminateProcess 通过加载的 DLL - 阻止调用以终止您的进程 通过注入线程的用户模式挂钩 TerminateProcess - 阻止调用以终止您的进程 内核模式调用挂钩 - 从驱动程序接管对内核内部 TerminateProcess 的任何调用 直接内核对象操作 (DKOM) - 修改内核进程列表,使您的进程不可见 调试器技巧 - 如果您调试自己的进程,它不会被杀死 Windows Protected Services - 使进程无法杀死的操作系统功能 工具操作 - 直接修改 TaskMgr、Process Explorer、pskill、taskkill 二进制文件

是的,防病毒、反恶意软件和 DRM 软件不应该能够保护自己免受获得管理权限的恶意软件的侵害。但是 Microsoft、McAfee、Cylance、WildVine 和其他公司都这样做了 - 并且 Microsoft 认可并启用了受保护的服务。所以我们到了。

【讨论】:

以上是关于Delphi 7 - 防止用户在任务管理器中杀死进程的主要内容,如果未能解决你的问题,请参考以下文章

Android防止Service被杀死

Android防止Service被杀死

Android防止Service被杀死

如果应用程序从任务管理器中被杀死,NSUrlSession 是不是会继续文件传输?

用任务管理器杀死时如何防止内存泄漏[重复]

如何防止任务管理器杀死我的 pythonw 脚本?