VC_双进程保护代码

      我这里讲的方法实际上是不能终止的两个进程。讲到这里相信很多人都明白了,就是两个进程相互监视,一旦发现对方被杀就立刻重启对方。这样,这两个进程就很难被杀死了,至少我认为用任务管理器是不可能杀死它们的。

      我的例子中,每个进程建立一个线程专门用于监视,这样主线程还可以做其他的事情。另外,注意那个互斥对象的使用。当然,这个程序可能写的不是很完美。

#include <windows.h>

DWORD WINAPI ThreadCheckProc(LPVOID lParam)
{
    STARTUPINFO si={sizeof(si)};
    PROCESS_INFORMATION pi={0};
    HANDLE hMutex;
    char *pName=(char *)lParam;
    while(true)
    {
      hMutex=OpenMutex(MUTEX_ALL_ACCESS,FALSE,pName);
      if(!hMutex)
      {
        CreateProcess(pName,
          NULL,
          NULL, // Process handle not inheritable.
          NULL, // Thread handle not inheritable.
          FALSE, // Set handle inheritance to FALSE.
          0, // No creation flags.
          NULL, // Use parent's environment block.
          NULL, // Use parent's starting directory.
          &si, // Pointer to STARTUPINFO structure.
          &pi ); // Pointer to PROCESS_INFORMATION structure.
        WaitForSingleObject( pi.hProcess, INFINITE );
        CloseHandle( pi.hProcess );
        CloseHandle( pi.hThread );
      }
      else
      {
        CloseHandle(hMutex);
      }
    Sleep(1);
    }
}

int WINAPI WinMain(
HINSTANCE hInstance, // handle to current instance
HINSTANCE hPrevInstance, // handle to previous instance
LPSTR lpCmdLine, // command line
int nCmdShow // show state
)
{
    DWORD ThreadId;
    CreateMutex(NULL,TRUE,"test1.exe");
    CreateThread(NULL,0,ThreadCheckProc,(LPVOID *)"test2.exe",0,&ThreadId);
    while(1)
    {
      Sleep(1000);
    }
    return 0;
}


//test2.cpp

#include <windows.h>

DWORD WINAPI ThreadCheckProc(LPVOID lParam)
{
    STARTUPINFO si={sizeof(si)};
    PROCESS_INFORMATION pi={0};
    HANDLE hMutex;
    char *pName=(char *)lParam;
    while(true)
    {
      hMutex=OpenMutex(MUTEX_ALL_ACCESS,FALSE,pName);
      if(!hMutex)
      {
        CreateProcess(pName,
          NULL,
          NULL, // Process handle not inheritable.
          NULL, // Thread handle not inheritable.
          FALSE, // Set handle inheritance to FALSE.
          0, // No creation flags.
          NULL, // Use parent's environment block.
          NULL, // Use parent's starting directory.
          &si, // Pointer to STARTUPINFO structure.
          &pi ); // Pointer to PROCESS_INFORMATION structure.
        WaitForSingleObject( pi.hProcess, INFINITE );
        CloseHandle( pi.hProcess );
        CloseHandle( pi.hThread );
      }
      else
      {
        CloseHandle(hMutex);
      }
    Sleep(1);
    }
}

int WINAPI WinMain(
HINSTANCE hInstance, // handle to current instance
HINSTANCE hPrevInstance, // handle to previous instance
LPSTR lpCmdLine, // command line
int nCmdShow // show state
)
{
    DWORD ThreadId;
    CreateMutex(NULL,TRUE,"test2.exe");
    CreateThread(NULL,0,ThreadCheckProc,(LPVOID *)"test1.exe",0,&ThreadId);
    while(1)
    {
      Sleep(1000);
    }
    return 0;
}



#include "stdafx.h"

//Select
void choise( int *buff,int len)
{
      int i,j,temp;
      for(i=0;i<len-1;i++)
      {
           for(j=i+1;j<len;j++)
           {
                if( buff[j] > buff[i] )
                {
                    temp = buff[j];
                    buff[j] = buff[i];
                    buff[i] = temp;
                }
           }
      }
}

int main(int argc, char* argv[])
{
int str[]={23,45,1,-4,43};

choise(str,5);

   for( int i=0;i<5;i++)
      {
           printf("%d ",str[i]);
      }
return 0;
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值