rendered paste bodybool ToggleHookFinished = true;
void RemoveHook( )
{
//Only remove CGAME + UI Once as when you rehook VM_Create it will auto hook them again ;)
CGame.RemoveDetour( );
UI.RemoveDetour( );
VCreate.RemoveDetour( );
}
void ApplyHook( )
{
VCreate.SetDetour( );
}
DWORD ToggleHookThread( )
{
Sleep( 2000 );
ApplyHook( );
ToggleHookFinished = true;
return 0;
}
void ToggleHook( )
{
RemoveHook( );
CTHREAD( ToggleHookThread, 0 );
}
DWORD (__stdcall *orig_VirtualQueryEx )( HANDLE Process, void *pAddress, PMEMORY_BASIC_INFORMATION pMBIBuffer, DWORD Length );
DWORD __stdcall VirtualQueryEx_hook( HANDLE Process, void *pAddress, PMEMORY_BASIC_INFORMATION pMBIBuffer, DWORD Length )
{
if( ( DWORD )pAddress == 0x400000 && Length == 0x1C && ToggleHookFinished == true )
{
ToggleHookFinished = false;
ToggleHook( );
}
return orig_VirtualQueryEx( Process, pAddress, pMBIBuffer, Length );
}
BOOL APIENTRY DllMain( HMODULE hModule, DWORD dwReason, LPVOID lpReserved )
{
if ( dwReason == DLL_PROCESS_ATTACH )
{
orig_VMCreate = (DWORD (WINAPIV *)(LPVOID)) VCreate.CreatePBDetourEx( (PBYTE) VMCREATE_ADDR, (PBYTE) VMCreate_Hook );
orig_LoadLibrary = (HMODULE (WINAPI *)(LPCTSTR)) DetourFunction( (PBYTE) LoadLibraryA, (PBYTE)LoadLibrary_Hook );
orig_VirtualQueryEx = (DWORD (__stdcall *)(HANDLE,void *,PMEMORY_BASIC_INFORMATION,DWORD))VQEX.CreatePBDetourEx( (PBYTE)GetProcAddress( LoadLibraryA( "kernel32.dll" ), "VirtualQueryEx" ), (PBYTE)VirtualQueryEx_hook );
}
return TRUE;
}