int32_t __fastcall PromptUserForNewId(uintptr_t this_, int32_t default_id) { uint32_t object_type = ((uint32_t(__fastcall*)(uintptr_t))(*(uintptr_t*)(*(uintptr_t*)this_ + 0x18)))(this_); CYDWEEventData eventData; eventData.setEventData("class", this_); eventData.setEventData("object_type", object_type); eventData.setEventData("default_id", default_id); const std::vector<int> &results = event_array[EVENT_NEW_OBJECT_ID](eventData); return results.size() > 0 ? results[0] : default_id; }
LRESULT CALLBACK DetourWeWindowProc(HWND windowHandle, UINT message, WPARAM wParam, LPARAM lParam) { CYDWEEventData eventData; eventData.setEventData("handle", windowHandle); eventData.setEventData("message", message); eventData.setEventData("wparam", wParam); eventData.setEventData("lparam", lParam); const std::vector<int> &results = event_array[EVENT_WINDOW_MESSAGE](eventData); if (!results_is_failed(results)) { // All allowed return aero::std_call<LRESULT>(pgTrueWeWindowProc, windowHandle, message, wParam, lParam); } else { return 0; } }
LRESULT CALLBACK DetourWeWindowProc(HWND windowHandle, UINT message, WPARAM wParam, LPARAM lParam) { CYDWEEventData eventData; eventData.setEventData("handle", windowHandle); eventData.setEventData("message", message); eventData.setEventData("wparam", wParam); eventData.setEventData("lparam", lParam); const std::vector<int> &results = event_array[EVENT_WINDOW_MESSAGE](eventData); if (std::find_if(results.begin(), results.end(), YDWE_EVENT_FAILED(boost::lambda::_1)) == results.end()) { // All allowed return aero::std_call<LRESULT>(pgTrueWeWindowProc, windowHandle, message, wParam, lParam); } else { return 0; } }
HANDLE WINAPI DetourStormCreateFileA(LPCSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile) { std::string fileName(lpFileName); if (gIsInCompileProcess && ( boost::iends_with(fileName, ".w3x") || boost::iends_with(fileName, ".w3m")/* || boost::iends_with(fileName, ".w3n") */ // Disabled because does not support campaign )) { CYDWEEventData eventData; eventData.setEventData("map_path", fileName); event_array[EVENT_SAVE_MAP](eventData); gIsInCompileProcess = false; } //LOG4CXX_TRACE(NYDWE::gInjectLogger, boost::format("Storm CreateFile: %1%") % lpFileName); return aero::std_call<HANDLE>(pgTrueCreateFileA, lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile); }
BOOL WINAPI DetourWeSetMenu(HWND hWnd, HMENU hMenu) { if (hWnd == gWeMainWindowHandle) { // Main window menu gWeMainMenuHandle = hMenu; // Call menu initialization CYDWEEventData eventData; eventData.setEventData("main_window_handle", hWnd); eventData.setEventData("main_menu_handle", hMenu); event_array[EVENT_INIT_MENU](eventData); // Hook window pgTrueWeWindowProc = (decltype(pgTrueWeWindowProc))GetWindowLongPtrA(gWeMainWindowHandle, GWL_WNDPROC); SetWindowLongA(gWeMainWindowHandle, GWL_WNDPROC, reinterpret_cast<LONG>(DetourWeWindowProc)); } return aero::std_call<BOOL>(pgTrueSetMenu, hWnd, hMenu); }
BOOL WINAPI DetourWeCreateProcessA(LPCSTR lpApplicationName, LPSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCSTR lpCurrentDirectory, LPSTARTUPINFOA lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation) { //LOG4CXX_TRACE(NYDWE::gInjectLogger, boost::format("ApplicationName: %1%") % lpApplicationName); //LOG4CXX_TRACE(NYDWE::gInjectLogger, boost::format("CommandLine: %1%") % lpCommandLine); std::cmatch matcher; if (lpCommandLine && std::regex_match(lpCommandLine, matcher, gRegexCommandLine)) { std::string currentWarcraftMap = (ydwe::path::get(ydwe::path::DIR_EXE).remove_filename() / matcher.str(1)).string(); LOG4CXX_TRACE(NYDWE::gInjectLogger, boost::format("Executing map %1%") % currentWarcraftMap); CYDWEEventData eventData; if (gIsInCompileProcess) { LOG4CXX_TRACE(NYDWE::gInjectLogger, "Need to compile..."); eventData.setEventData("map_path", currentWarcraftMap); const std::vector<int> &results = event_array[EVENT_SAVE_MAP](eventData); gIsInCompileProcess = false; if (results_is_failed(results)) { LOG4CXX_TRACE(NYDWE::gInjectLogger, "Save failed. Abort testing."); memset(lpProcessInformation, 0, sizeof(PROCESS_INFORMATION)); return FALSE; } } else { LOG4CXX_TRACE(NYDWE::gInjectLogger, "No need to compile."); } eventData.getDataStore().clear(); eventData.setEventData("map_path", currentWarcraftMap); if (lpApplicationName) eventData.setEventData("application_name", std::string(lpApplicationName)); if (lpCommandLine) eventData.setEventData("command_line", std::string(lpCommandLine)); const std::vector<int> &results = event_array[EVENT_TEST_MAP](eventData); return (!results_is_failed(results)); } else { // Retain original return aero::std_call<BOOL>(pgTrueCreateProcessA, lpApplicationName, lpCommandLine, lpProcessAttributes, lpThreadAttributes, bInheritHandles, dwCreationFlags, lpEnvironment, lpCurrentDirectory, lpStartupInfo, lpProcessInformation ); } }
INT_PTR CALLBACK DetourWeDialogProc(HWND dialogHandle, UINT message, WPARAM wParam, LPARAM lParam) { if (message == WM_SETTEXT) { if (lParam) { CYDWEEventData eventData; eventData.setEventData("handle", dialogHandle); eventData.setEventData("message", message); eventData.setEventData("wparam", wParam); eventData.setEventData("lparam", std::string((const char*)lParam)); const std::vector<int> &results = event_array[EVENT_DIALOG_MESSAGE](eventData); if (results_is_failed(results)) { return 0; } } } else if (message == WM_COMMAND) { CYDWEEventData eventData; eventData.setEventData("handle", dialogHandle); eventData.setEventData("message", message); eventData.setEventData("wparam", wParam); eventData.setEventData("lparam", lParam); const std::vector<int> &results = event_array[EVENT_DIALOG_MESSAGE](eventData); if (results_is_failed(results)) { return 0; } } return aero::std_call<INT_PTR>(pgTrueWeDialogProc, dialogHandle, message, wParam, lParam); }