HelpCalling WireFrame

Posts 1–2 of 2 · Page 1 of 1
Calling WireFrame
How can I call in wireframe for the D3D base below


Wireframe code :
Code:
void Wireframe()
{ 
	IDirect3DVertexBuffer9* pStreamData = NULL;
              UINT pOffsetInBytes , pStride;
              pDevice->GetStreamSource(0,&pStreamData,&pOffsetInBytes,&pStride);

	if (pStride == 24 || pStride == 28)//Wireframe Example
	{
                  pDevice->SetRenderState(D3DRS_FILLMODE,D3DFILL_WIREFRAME);
	}
}
D3D Base :
Code:
#include <windows.h>
#include <d3d9.h>
#include <d3dx9.h>

#pragma comment(lib, "d3d9.lib")
#pragma comment(lib, "d3dx9.lib")

DWORD DIPD3D9, retDIPD3D9;

__declspec( naked ) HRESULT WINAPI DIPMidfunction( )
{
	static LPDIRECT3DDEVICE9 pDevice;

	__asm
	{
		MOV EDI, EDI
		PUSH EBP
		MOV EBP, ESP
		MOV EAX, DWORD PTR SS:[EBP + 0x8]
		MOV DWORD PTR DS:[pDevice], EAX
	}

	pDevice->SetRenderState( D3DRS_ZENABLE, D3DZB_FALSE );
	
	__asm
	{
		POP EBP
		JMP retDIPD3D9
	}
}

VOID *DetourCreate( BYTE *src, CONST BYTE *dst, CONST INT len )
{
	BYTE *jmp =( BYTE * ) malloc( len + 5 );
	DWORD dwBack;

	VirtualProtect( src, len, PAGE_READWRITE, &dwBack );
	memcpy( jmp, src, len );    
	jmp += len;
	jmp[0] = 0xE9;
	*( DWORD * )( jmp + 1 ) = ( DWORD )( src + len - jmp ) - 5;

	src[0] = 0xE9;
	*( DWORD * )( src + 1 ) = ( DWORD )( dst - src ) - 5;
	for( INT i = 5; i < len; i++ )
		src[i] = 0x90;
	VirtualProtect( src, len, dwBack, &dwBack );

	return ( jmp - len );
}

BOOL bCompare( CONST BYTE *pData, CONST BYTE *bMask, CONST CHAR *szMask )
{
	for( ; *szMask; ++szMask, ++pData, ++bMask )
		if( *szMask == 'x' && *pData != *bMask )   
		return false;
	
	return ( *szMask ) == NULL;
}

DWORD FindPattern(DWORD dwAddress,DWORD dwLen,BYTE *bMask,char * szMask)
{
	for( DWORD i = 0; i < dwLen; i++ )
		if( bCompare( ( BYTE * )( dwAddress + i ), bMask, szMask ) )  
		return ( DWORD )( dwAddress + i );
	
	return 0;
}

DWORD WINAPI StartRoutine( LPVOID )
{
    while( TRUE )
    {
		DWORD hD3D = ( DWORD )LoadLibrary( "d3d9.dll" );

		if( !DIPD3D9 )
		{
			// Windows XP
			DIPD3D9 = FindPattern( hD3D,
				0x128000,
				( PBYTE )"\x8B\xFF\x55\x8B\xEC\x5D\xE9\x00\x00\x00\x00\xCC\xCC\xCC\xCC\xCC\x8B\xFF\x55\x8B\xEC\x51",
				"xxxxxxx????xxxxxxxxxxx" );
			if( DIPD3D9 )
			{
				retDIPD3D9 = DIPD3D9 + 0x6;
				DetourCreate( ( PBYTE )DIPD3D9, ( PBYTE )DIPMidfunction, 5 );
			}
		}

		if( !DIPD3D9 )
		{
			// Windows 7
			DIPD3D9 = FindPattern( hD3D,
				0x128000,
				( PBYTE )"\xC3\x90\x90\x90\x90\x90\x8B\xFF\x55\x8B\xEC\x5D\xEB\x05\x90\x90\x90\x90\x90\x8B\xFF\x55\x8B\xEC\x6A\xFF",
				"xxxxxxxxxxxxxxxxxxxxxxxxxx" );
			if( DIPD3D9 )
			{
				retDIPD3D9 = ( DIPD3D9 + 0x6 ) + 0x6;
				DetourCreate( ( PBYTE )( DIPD3D9 + 0x6 ), ( PBYTE )DIPMidfunction, 5 );
			}
		}
    	}
 
    	return 0;
}

BOOL WINAPI DllMain( HMODULE hDll, DWORD dwReason, LPVOID lpReserved )
{ 
	if( dwReason == DLL_PROCESS_ATTACH )
	{
		DisableThreadLibraryCalls( hDll );
		MessageBox( 0, "WE11ington", "HOOK DIP", 0 );
        	CreateThread( 0, 0, (LPTHREAD_START_ROUTINE)StartRoutine, 0, 0, 0 );		
	}

	return TRUE;
}
__declspec( naked ) HRESULT WINAPI DIPMidfunction( )
{
static LPDIRECT3DDEVICE9 pDevice;

__asm
{
MOV EDI, EDI
PUSH EBP
MOV EBP, ESP
MOV EAX, DWORD PTR SS:[EBP + 0x8]
MOV DWORD PTR DS:[pDevice], EAX
}

{
if( Stride == 36 || Stride == 32 )
{
pDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME);
}
}else{
if( Stride == 36 || Stride == 32 )
{
pDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID);
}
}

__asm
{
POP EBP
JMP retDIPD3D9
}
}
Posts 1–2 of 2 · Page 1 of 1
This thread is closed for replies.

Similar Threads

Tags for this Thread

None

Need help?