制作应用程序System Critical Process

时间:2010-11-08 17:13:31

标签: c# .net process

如何制作一个关键系统流程,以便它不能从C#中的任务管理器结束?

2 个答案:

答案 0 :(得分:5)

通常,不可能这样做,因为它会夺走用户的控制权。 Windows甚至允许你杀死高度关键的进程,如csrss.exe(请不要尝试杀死它,请保证即时BSOD)。

雷蒙德·陈非常好地解释了为什么会出现这种情况的原因:

  

<强> The arms race between programs and users

如果您不希望用户终止您的流程,请将其设为服务并从您的用户手中夺走管理员权限。

答案 1 :(得分:0)

可能有点晚,但这是我使用的代码

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

    private static extern bool SetKernelObjectSecurity(
         IntPtr handle,
         int securityInformation,
         [In] byte[] securityDescriptor
     );

在 C# 上调用函数

RtlSetProcessIsCritical(1, 0, 0);

请注意

  • 您需要管理员来执行此操作
  • 每当您关闭进程时都会导致蓝屏

要恢复正常就做

RtlSetProcessIsCritical(0, 0, 0);