All pastes #941200 Raw Edit

Miscellany

public text v1 · immutable
·published 2008-03-13 15:42 UTC
rendered paste body
bool 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;
}