进程守护
进程守护是指防止进程被结束掉,用一些编程技术把它保护起来,一般是病毒采用的技术手段,它们hook一些api,或者注入其它进程空间,比较多的是注入explorer.exe,这些技术应该属于单进程守护,因为我的程序中还不会用到,所以也没有研究。本文只是讲解些一般的双进程守护,可以达到进程守护的目的,在任务管理器中也可以看到相关的进程。
所谓的双进程守护,就是两个程序有部分相同的源代码,一起启动后,在一方被某种方式退出时再把它启动起来,达到双方都不会被退出的效果。一般的这种双进程守护,可能会占用比较多的CPU,本文实现的方法所占用的CPU还是比较少的。
具体的思路是:
1. 定义一个全局句柄m_hProcess,用于存储另一进程的句柄。
2. 程序启动后,先枚举所有的进程列表,查看是否有另一进程,如果有的话,通过OpenProcess得到其进程句柄,存储在1中的变量中
3. 此时判断该句柄是否为NULL,不为NULL就用WaitForSingleObject等待直到这个进程被终止,并且再把m_hProcess置NULL
4. 接着3,创建另一进程,因为不论原来的另一进程被杀掉还是本来进程列表就没有此进程,都要创建该进程。
5. 创建另一进程句柄,然后等待其结束,如果结束了,重复2,3,4
具体代码:
void CProcWatchDlg::test()
{
ProcessList();
if( m_hProcess != NULL )
{
WaitForSingleObject(m_hProcess, INFINITE);
m_hProcess = NULL;
}
CreateProcess();
}
void CProcWatchDlg::CreateProcess()
{
// 创建另一进程
CreateProcess();
// 等待结束
WaitForSingleObject(pi.hProcess, INFINITE);
// 重复
test();
}
// 枚举所有进程
void CProcWatchDlg::ProcessList()
{}