Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # pragma once
- # include <Windows.h>
- # pragma comment( lib, "user32.lib" )
- # include <d3d9.h>
- # pragma comment( lib, "d3d9.lib" )
- # include <detours.h>
- # pragma comment( lib, "detours.lib" )
- typedef HRESULT( __stdcall* tEndScene )( IDirect3DDevice9* );
- WNDPROC lpPrevWndFunc = NULL;
- tEndScene oEndScene = NULL;
- D3DDEVICE_CREATION_PARAMETERS d3dcp = { 0 };
- LRESULT CALLBACK WndProc( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam )
- {
- if ( GetAsyncKeyState( VK_END ) )
- {
- MessageBoxA( hWnd, "TEST", "", MB_ICONINFORMATION | MB_OK );
- }
- return CallWindowProc( lpPrevWndFunc, hWnd, Msg, wParam, lParam );
- }
- HRESULT WINAPI hkEndScene( IDirect3DDevice9* pDevice )
- {
- pDevice->GetCreationParameters( &d3dcp );
- if ( !lpPrevWndFunc )
- lpPrevWndFunc = ( WNDPROC )SetWindowLongPtr( d3dcp.hFocusWindow, GWLP_WNDPROC, ( LONG_PTR )WndProc );
- return oEndScene( pDevice );
- }
- LRESULT CALLBACK MsgProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
- {
- return DefWindowProc( hwnd, uMsg, wParam, lParam );
- }
- VOID WINAPI GetVTable( PDWORD* vtable )
- {
- WNDCLASSEX wc = { sizeof( WNDCLASSEX ), CS_CLASSDC, MsgProc, 0L, 0L, GetModuleHandle( NULL ), NULL, NULL, NULL, NULL, "DX", NULL };
- RegisterClassEx( &wc );
- HWND hWnd = CreateWindow( "DX", NULL, WS_OVERLAPPEDWINDOW, 100, 100, 300, 300, GetDesktopWindow(), NULL, wc.hInstance, NULL );
- LPDIRECT3D9 pD3D = Direct3DCreate9( D3D_SDK_VERSION );
- D3DPRESENT_PARAMETERS d3dpp;
- ZeroMemory( &d3dpp, sizeof( d3dpp ) );
- d3dpp.Windowed = TRUE;
- d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
- d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
- LPDIRECT3DDEVICE9 pd3dDevice;
- pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &pd3dDevice );
- DWORD* pVTable = ( DWORD* )pd3dDevice;
- pVTable = ( DWORD* )pVTable[0];
- *vtable = pVTable;
- DestroyWindow( hWnd );
- return;
- }
- DWORD WINAPI MyThread( LPVOID lpParam )
- {
- PDWORD VTable = { 0 };
- while ( GetModuleHandle( "d3d9.dll" ) == NULL )
- Sleep( 350 );
- GetVTable( &VTable );
- oEndScene = ( tEndScene )DetourFunction( ( PBYTE )VTable[42], ( PBYTE )hkEndScene );
- return 0;
- }
- BOOL WINAPI DllMain( HMODULE hModule, DWORD dwReason, LPVOID lpReserved )
- {
- switch ( dwReason )
- {
- case DLL_PROCESS_ATTACH:
- CreateThread( NULL, 0, ( LPTHREAD_START_ROUTINE )MyThread, NULL, 0x0, NULL );
- return true;
- break;
- }
- return false;
- }
Add Comment
Please, Sign In to add comment