进程守护

进程守护
 
进程守护是指防止进程被结束掉,用一些编程技术把它保护起来,一般是病毒采用的技术手段,它们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()
{}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值