コード例 #1
0
ファイル: LuaEvent.cpp プロジェクト: h82258652/YDWE
	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;
	}
コード例 #2
0
ファイル: LuaEvent.cpp プロジェクト: myeang1/YDWE
	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;
		}
	}
コード例 #3
0
ファイル: LuaEvent.cpp プロジェクト: h82258652/YDWE
	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;
		}
	}
コード例 #4
0
ファイル: LuaEvent.cpp プロジェクト: myeang1/YDWE
	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);
	}
コード例 #5
0
ファイル: LuaEvent.cpp プロジェクト: myeang1/YDWE
	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);
	}
コード例 #6
0
ファイル: LuaEvent.cpp プロジェクト: myeang1/YDWE
	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
				);
		}
	}
コード例 #7
0
ファイル: LuaEvent.cpp プロジェクト: myeang1/YDWE
	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);
	}