如何保护进程不被终止
How to protect a process from being killed?
我试图保护 c++ 窗口中的进程,代码为:
#include <iostream>
#include <Aclapi.h>
#include <iostream>
#include <windows.h>
#include <sddl.h>
#include <stdio.h>
using namespace std;
BOOL DenyAccess()
{
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, GetCurrentProcessId());
SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle = FALSE;
SetKernelObjectSecurity(hProcess, DACL_SECURITY_INFORMATION, sa.lpSecurityDescriptor);
return TRUE;
}
int main()
{
while(DenyAccess());
return 0;
}
但是我可以从任务管理器中杀死进程! 怎么了?
Windows
服务器使用一对相互监控的线程来强制执行 Windows Server 与 Windows Client 的许可。如果一个线程停止或挂起,另一个线程将恢复受影响的线程或启动新线程。线程在系统进程中运行。您无法在不使窗口崩溃的情况下终止系统进程。
因此,一种方法是将代码注入到启动一对线程的系统进程中,并让线程保护每个线程并执行任何您让无法杀死的进程执行的操作(或者让第三个线程执行您想要的任何工作)。您可以将线程设置为非常高的优先级,以确保没有任何内容可以同时成功定位两个线程。
有一个解决方法。与其使进程不可杀死,不如使进程"关键",这意味着杀死此进程会导致Windows系统崩溃(BSOD)。
这可以通过在ntdll.dll中调用未记录的函数RtlSetProcessIsCritical来完成。
请参阅 http://www.codeproject.com/Articles/43405/Protecting-Your-Process-with-RtlSetProcessIsCriti 中的详细示例
但请记住:您必须在注销和/或系统关闭时实现正确的终止。否则,在这种情况下系统将崩溃。
相关文章:
- 使用 waitpid 时等待子进程终止
- 检测到由于操作系统内存不足而导致子进程终止
- 终端进程终止,退出代码为:1有什么方法可以修复它吗
- 使用system("./some_program"),当"some_program"死亡时,如何防止父进程终止?
- Ubuntu 服务器管道在第一次退出时停止进程终止
- win32 进程终止检测:WMI 与 WaitForSingleObject
- 如何停止DLL中的进程终止异常
- 使用终止进程终止"mstsc.exe"进程时出现错误代码(5)访问被拒绝
- 在 Linux 上使用 C++ 记录进程终止的原因
- 可以终止线程从另一个进程终止线程
- 进程等待另一进程终止时的信号处理
- MPI::COMM::Create之后的死锁(所有进程终止)
- 代码::阻止进程终止,状态为1
- libpqxx:如何在连接进程终止后重新连接到Postgresql数据库
- Fork进程:在子进程终止时恢复父进程(Linux)
- Qt处理进程终止
- 在所有子进程终止后,不能运行父进程
- 调用函数时进程终止
- C/ c++窗口中的进程终止
- 由于c++ bool函数的StackOverflowException导致进程终止