All pastes #906980 Raw Edit

moi

public text v1 · immutable
·published 2008-02-17 03:35 UTC
rendered paste body
void ApplyHook()
{
	orig_CG_Init		=	(void (WINAPIV *)(int,int,int,int)) \
		DetourFunction((PBYTE)Game->CG_Init,			(PBYTE)CG_Init_Hook );
	__asm mov [ orig_CG_Init ], eax;

	orig_RegisterFont	=	(DWORD (__cdecl *)(char *,int)) \
		DetourFunction((PBYTE)Game->CG_RegisterFont,	(PBYTE)R_RegisterFont);
	__asm mov [ orig_RegisterFont ], eax;

	orig_RenderScene	=	(void (__cdecl *)(void)) \
		DetourFunction((PBYTE)Game->CG_RenderScene,		(PBYTE)R_RenderScene);
	__asm mov [ orig_RenderScene ], eax;

	orig_EndFrame		=	(void (__cdecl *)(void)) \
		DetourFunction((PBYTE)Game->CG_EndFrame,		(PBYTE)EndFrame );
	__asm mov [ orig_EndFrame ], eax;

	orig_CG_FireRecoil	=	(void (__cdecl *)(void)) \
		DetourFunction((PBYTE)Game->CG_FireRecoil,		(PBYTE)CG_FireRecoil);
	__asm mov [ orig_CG_FireRecoil ], eax;

	orig_CG_Obituary	=	(void (__cdecl *)(void)) \
		DetourFunction((PBYTE)Game->CG_Obituary,		(PBYTE)CG_Obituary_Hook );
	__asm mov [ orig_CG_Obituary ], eax;

	orig_CvarReg		=	(vmCvar_t *(__cdecl *)(LPCSTR,int,int,LPCSTR,int,int,int,int,int,int)) \
		DetourFunction((PBYTE)Game->CG_CvarReg,			(PBYTE)CvarReg_Hook );
	__asm mov [ orig_CvarReg ], eax;
}


void RemoveHook( )
{
	DetourRemove((PBYTE)orig_CG_Init,		(PBYTE)CG_Init_Hook );
	DetourRemove((PBYTE)orig_RegisterFont,	(PBYTE)R_RegisterFont );
	DetourRemove((PBYTE)orig_RenderScene,	(PBYTE)R_RenderScene );
	DetourRemove((PBYTE)orig_EndFrame,		(PBYTE)EndFrame );
	DetourRemove((PBYTE)orig_CG_FireRecoil,	(PBYTE)CG_FireRecoil );
	DetourRemove((PBYTE)orig_CG_Obituary,	(PBYTE)CG_Obituary_Hook );
	DetourRemove((PBYTE)orig_CvarReg,		(PBYTE)CvarReg_Hook );
}


DWORD ToggleHookThread( )
{
	Sleep( 2000 );
	ApplyHook( );
	return 0;
}


void ToggleHook( )
{
	RemoveHook( );
	CTHREAD( ToggleHookThread, 0 );
}


DWORD ( WINAPI *orig_VirtualQueryEx )( HANDLE Process, void *pAddress, PMEMORY_BASIC_INFORMATION pMBIBuffer, DWORD Length );
DWORD WINAPI 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 );
}