2019-01-05 20:21:43 +08:00
|
|
|
|
#include <windows.h>
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
|
#include <iostream>
|
|
|
|
|
|
|
|
|
|
|
|
typedef void (*StopRun)();
|
|
|
|
|
|
|
|
|
|
|
|
typedef bool (*IsStoped)();
|
|
|
|
|
|
|
|
|
|
|
|
// ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
StopRun stop = NULL;
|
|
|
|
|
|
|
|
|
|
|
|
// <20>Ƿ<EFBFBD><C7B7>ɹ<EFBFBD>ֹͣ
|
|
|
|
|
|
IsStoped bStop = NULL;
|
|
|
|
|
|
|
2019-04-15 16:24:32 +08:00
|
|
|
|
// <20>Ƿ<EFBFBD><C7B7>˳<EFBFBD><CBB3><EFBFBD><EFBFBD>ض<EFBFBD>
|
|
|
|
|
|
IsStoped bExit = NULL;
|
|
|
|
|
|
|
|
|
|
|
|
BOOL status = 0;
|
|
|
|
|
|
|
2019-01-05 20:21:43 +08:00
|
|
|
|
struct CONNECT_ADDRESS
|
|
|
|
|
|
{
|
|
|
|
|
|
DWORD dwFlag;
|
|
|
|
|
|
char szServerIP[MAX_PATH];
|
|
|
|
|
|
int iPort;
|
|
|
|
|
|
}g_ConnectAddress={0x1234567,"",0};
|
|
|
|
|
|
|
2019-03-25 22:25:14 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
* @param[in] *sPath ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD>
|
|
|
|
|
|
* @param[in] *sNmae ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
* @details Win7 64λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD><EFBFBD>Խ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD>\n
|
|
|
|
|
|
* HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run
|
|
|
|
|
|
* @note <EFBFBD>״<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>Թ<EFBFBD><EFBFBD><EFBFBD>ԱȨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD>뿪<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
*/
|
|
|
|
|
|
BOOL SetSelfStart(const char *sPath, const char *sNmae)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
2019-03-25 22:25:14 +08:00
|
|
|
|
// д<><D0B4><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
|
|
|
|
|
|
#define REGEDIT_PATH "Software\\Microsoft\\Windows\\CurrentVersion\\Run\\"
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|
|
|
|
|
HKEY hKey = NULL;
|
|
|
|
|
|
LONG lRet = RegOpenKeyExA(HKEY_LOCAL_MACHINE, REGEDIT_PATH, 0, KEY_ALL_ACCESS, &hKey);
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7>ɹ<EFBFBD>
|
|
|
|
|
|
if(lRet != ERROR_SUCCESS)
|
|
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
|
|
|
|
lRet = RegSetValueExA(hKey, sNmae, 0, REG_SZ, (const BYTE*)sPath, strlen(sPath) + 1);
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ر<EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
|
|
|
|
|
|
RegCloseKey(hKey);
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7>ɹ<EFBFBD>
|
|
|
|
|
|
return lRet == ERROR_SUCCESS;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2019-04-15 16:24:32 +08:00
|
|
|
|
BOOL CALLBACK callback(DWORD CtrlType)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (CtrlType == CTRL_CLOSE_EVENT)
|
|
|
|
|
|
{
|
|
|
|
|
|
status = 1;
|
|
|
|
|
|
if(stop) stop();
|
|
|
|
|
|
while(1==status)
|
|
|
|
|
|
Sleep(20);
|
|
|
|
|
|
}
|
|
|
|
|
|
return TRUE;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2019-03-25 22:25:14 +08:00
|
|
|
|
int main(int argc, const char *argv[])
|
|
|
|
|
|
{
|
|
|
|
|
|
if(!SetSelfStart(argv[0], "a_ghost"))
|
|
|
|
|
|
{
|
2019-04-19 11:02:18 +08:00
|
|
|
|
std::cout<<"<EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ù<EFBFBD><EFBFBD><EFBFBD>ԱȨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.\n";
|
2019-03-25 22:25:14 +08:00
|
|
|
|
}
|
2019-04-15 16:24:32 +08:00
|
|
|
|
status = 0;
|
|
|
|
|
|
SetConsoleCtrlHandler(&callback, TRUE);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
char path[_MAX_PATH], *p = path;
|
|
|
|
|
|
GetModuleFileNameA(NULL, path, sizeof(path));
|
|
|
|
|
|
while (*p) ++p;
|
|
|
|
|
|
while ('\\' != *p) --p;
|
|
|
|
|
|
strcpy(p+1, "ServerDll.dll");
|
|
|
|
|
|
HMODULE hDll = LoadLibraryA(path);
|
2019-03-25 22:25:14 +08:00
|
|
|
|
typedef void (*TestRun)(char* strHost,int nPort);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
TestRun run = hDll ? TestRun(GetProcAddress(hDll, "TestRun")) : NULL;
|
|
|
|
|
|
stop = hDll ? StopRun(GetProcAddress(hDll, "StopRun")) : NULL;
|
|
|
|
|
|
bStop = hDll ? IsStoped(GetProcAddress(hDll, "IsStoped")) : NULL;
|
2019-04-15 16:24:32 +08:00
|
|
|
|
bExit = hDll ? IsStoped(GetProcAddress(hDll, "IsExit")) : NULL;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
if (run)
|
|
|
|
|
|
{
|
|
|
|
|
|
char *ip = g_ConnectAddress.szServerIP;
|
|
|
|
|
|
int &port = g_ConnectAddress.iPort;
|
|
|
|
|
|
if (0 == strlen(ip))
|
|
|
|
|
|
{
|
2019-04-19 11:02:18 +08:00
|
|
|
|
strcpy(p+1, "settings.ini");
|
|
|
|
|
|
GetPrivateProfileStringA("settings", "localIp", "127.0.0.1", ip, _MAX_PATH, path);
|
|
|
|
|
|
port = GetPrivateProfileIntA("settings", "ghost", 2356, path);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
2019-04-19 11:02:18 +08:00
|
|
|
|
printf("[server] %s:%d\n", ip, port);
|
2019-04-15 16:24:32 +08:00
|
|
|
|
do
|
|
|
|
|
|
{
|
|
|
|
|
|
run(ip, port);
|
|
|
|
|
|
while(bStop && !bStop() && 0 == status)
|
|
|
|
|
|
Sleep(20);
|
|
|
|
|
|
} while (bExit && !bExit() && 0 == status);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
2019-04-15 16:24:32 +08:00
|
|
|
|
status = 0;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
return -1;
|
|
|
|
|
|
}
|