めいくりぷとのブログ

技術的なことやゲームのことやら・・・

AVA 更新

gyazo.com

何やら変なクラスが追加されましたの...
まあ avaGame/avaRules/Engine/AVANET 辺りしか触れないからどうでもいいんですけど...

それと今まではsplash画像はファイルチェックの対象外でフォルダごと消すだけで良かったけど、アプデ入ってから毎回全ファイルチェックされる糞仕様に変わったのでってことで。
ファイルチェックはPmangDownloaderに対してReadFile辺りフックしときゃなんとかなる。(知らないけど
無駄に3つくらい起動するから、proxy dllとかで全部にフックかければok

スプラッシュウィンドウ非表示

void Detour_CreateWindowExW()
{
	static decltype(&CreateWindowExW) _CreateWindowExW = CreateWindowExW;

	decltype(&CreateWindowExW) CreateWindowExW__Hook = [](
		_In_     DWORD     dwExStyle,
		_In_opt_ LPCWSTR   lpClassName,
		_In_opt_ LPCWSTR   lpWindowName,
		_In_     DWORD     dwStyle,
		_In_     int       x,
		_In_     int       y,
		_In_     int       nWidth,
		_In_     int       nHeight,
		_In_opt_ HWND      hWndParent,
		_In_opt_ HMENU     hMenu,
		_In_opt_ HINSTANCE hInstance,
		_In_opt_ LPVOID    lpParam) -> HWND
	{
		HMODULE hModule;

		if (GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, reinterpret_cast<TCHAR*>(_ReturnAddress()), &hModule))
		{
			if (hModule == GetModuleHandle(L"ava.exe"))
			{
				if (wcsstr(lpClassName, L"SPLASH"))
					return NULL;
			}
		}

		return _CreateWindowExW(dwExStyle, lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam);
	};

	DetourFunction(TRUE, reinterpret_cast<LPVOID*>(&_CreateWindowExW), CreateWindowExW__Hook);
}

誤クリックの地味にウザいアレ

VOID Detour_ShellExecuteExW()
{
	static decltype(&ShellExecuteExW) _ShellExecuteExW = ShellExecuteExW;

	decltype(&ShellExecuteExW) ShellExecuteExW__Hook = [](
		_Inout_ SHELLEXECUTEINFO *pExecInfo) -> BOOL
	{
		if (pExecInfo && wcsstr(pExecInfo->lpFile, L"IEXPLORE.EXE"))
			return FALSE;

		return _ShellExecuteExW(pExecInfo);
	};

	DetourFunction(TRUE, reinterpret_cast<LPVOID*>(&_ShellExecuteExW), ShellExecuteExW__Hook);
}