VC 双进程保护代码

//test1.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,"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;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值