如何制作一个关键系统流程,以便它不能从C#中的任务管理器结束?
答案 0 :(得分:5)
通常,不可能这样做,因为它会夺走用户的控制权。 Windows甚至允许你杀死高度关键的进程,如csrss.exe(请不要尝试杀死它,请保证即时BSOD)。
雷蒙德·陈非常好地解释了为什么会出现这种情况的原因:
如果您不希望用户终止您的流程,请将其设为服务并从您的用户手中夺走管理员权限。
答案 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);