Anyone wanna help me out, i am trying to hook my present engine. However it's not working..

Code:
#include "Includes.h"
#include "Menu.h"
#include "FunctionsMemory.h"
//#include "Colors.h"
//menu
Menu menu;
//funcs def
//defines
DWORD PresentEngine = FindPattern(0x400000, 0xFFFFFF,(PBYTE)"\x8B\x51\x00\x6A\x00\x6A\x00\x6A\x00\x50\xFF\xD2\xB8\x00\x00\x00\x00\xE8\x00\x00\x00\x00\xC7\x05\x00\x00\x00\x00","xx?x?x?x?xxxx????x????xx????");
DWORD retPresentEngine = (PresentEngine + 0x5);
int saveMe = 0;
//tests
LPD3DXFONT Font;

VOID StartFont( LPDIRECT3DDEVICE9 pDevice )
{
    if( Font )
    {
        Font->Release();
        Font = NULL;
    }

    if( !Font )
    {
        D3DXCreateFont( pDevice,
                        14,
                        0,
                        FW_BOLD,
                        1,
                        0,
                        DEFAULT_CHARSET,
                        OUT_DEFAULT_PRECIS,
                        DEFAULT_QUALITY,
                        DEFAULT_PITCH | FF_DONTCARE,
                        "Arial",
                        &Font );
    }
}

VOID WriteText( LPDIRECT3DDEVICE9 pDevice, INT x, INT y, DWORD color, CHAR *text )
{    
    RECT rect;
    SetRect( &rect, x, y, x, y );
    Font->DrawText( NULL, text, -1, &rect, DT_NOCLIP | DT_LEFT, color );
}
//Present
__declspec( naked ) HRESULT WINAPI PresentMidfunction( )
{
    static LPDIRECT3DDEVICE9 pDevice;

    __asm
    {
        MOV ECX, DWORD PTR DS:[EAX]
        MOV EDX, DWORD PTR DS:[ECX + 0x44]
        MOV DWORD PTR DS:[pDevice], EAX
        PUSH 0
        PUSHAD
    }
	//test
	StartFont(pDevice);
	if( Font )
        WriteText( pDevice, 300, 300, D3DCOLOR_ARGB( 255, 255, 000, 000 ), "CrossFire: Hook Present Engine" );
	//code here
	menu.InitializeMenu();
	menu.DrawMenu(pDevice);

    __asm
    {
        POPAD
        JMP retPresentEngine
    }
}
//hook
DWORD WINAPI StartRoutine( LPVOID )
{
    while( TRUE )
    {
        if( memcmp( ( VOID * )PresentEngine, ( VOID * )( PBYTE )"\x8B\x51", 2 ) == 0 )
        {
            Sleep( 100 );
            DetourCreate( ( PBYTE )PresentEngine, ( PBYTE )PresentMidfunction, 5 );
        }
        Sleep( 50 );
    }
 
    return 0;
}


BOOL WINAPI DllMain(HMODULE hDll, DWORD dwReason, LPVOID lpReserved)
{
	DisableThreadLibraryCalls(hDll);
	if(dwReason == DLL_PROCESS_ATTACH)
	{
		CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)StartRoutine, NULL, NULL, NULL);
	}
	return TRUE;
}