不可杀戮的过程

Zul*_*kis 4 c# windows service

我正在编写一个程序,其中包括一个Windows服务和一个GUI程序,因为Windows服务无法直接与Windows通信.

它是一个程序,它与服务器守护进程相互作用,阻止学生登录多个工作站的一个帐户.(防止密码共享)

GUI过程使用Windows自动启动启动,并使用用户权限运行.因此,用户可以轻松地杀死GUI进程.这不好,因为GUI进程导致注销(和用户消息).

如何阻止用户查杀进程?

Jon*_*Jon 9

由于您无法使用操作系统安全性来防止这种情况,因此技术上的答案是无法完成.这只留下了解决方法或替代方法.

一个没有得到官方支持的解决方法,依赖于未记录的功能,而您没有收到我的回复是:

public static class Unkillable
{
    [DllImport("ntdll.dll", SetLastError = true)]
    private static extern void RtlSetProcessIsCritical(UInt32 v1, UInt32 v2, UInt32 v3);

    public static void MakeProcessUnkillable()
    {
        Process.EnterDebugMode();
        RtlSetProcessIsCritical(1, 0, 0);
    }

    public static void MakeProcessKillable()
    {
        RtlSetProcessIsCritical(0, 0, 0);
    }
}
Run Code Online (Sandbox Code Playgroud)

在你打电话之后Unkillable.MakeProcessUnkillable,杀死这个过程会立即导致BSOD.这是一个非常难看的解决方案,但很难反驳"可以在2分钟内实施".

另一种解决方法是创建一组进程,通过在每个人死亡时重新启动来进行协作.

  • "没有听到我的声音" - 哈哈!可爱的解决方案,除了BSOD部分.个人而言,我不想在遇害时造成BSOD.我宁愿......不要死. (2认同)

Zul*_*kis 0

我最终使用了替代的 RunAs 程序CPAU,在登录时以管理员身份启动该进程。这样做,学生至少不能使用任务管理器或类似工具那么容易地杀死它。

稍后我也可能会实现乔恩建议的方法。这样,即使学生以某种方式设法终止该进程,他们也不会成功。