Отклоненная функция не вызывается

Я использую Visual Studio 2003 с CDetour.
На этот раз я не могу дать SSCE, вот что я сделал:

LPDIRECT3D9 d3d;
LPDIRECT3DDEVICE9 d3ddev;

CDetour CreateDevice_Det;
IDirect3D9* Direct3DCreate9_Hook( UINT SDKVersion )
{
MessageBox( GetForegroundWindow(), "Direct9 Create Hooked", "dForce.dll", MB_OK );
d3d = Direct3DCreate9(D3D_SDK_VERSION);
return d3d;
}

BOOL WINAPI DllMain(HINSTANCE hInst,DWORD reason,LPVOID reserved)
{
switch(reason)
{
case DLL_PROCESS_ATTACH:
{
HMODULE hd3d = GetModuleHandle( "d3d9.dll" );
if( hd3d == 0 )
{
MessageBox( GetForegroundWindow(), "d3d9.dll still not loaded", "dForce.dll", MB_ICONSTOP );
return FALSE;
}
DWORD lpAddr = (DWORD)GetProcAddress( hd3d, "Direct3DCreate9" );
if( lpAddr == 0 )
{
MessageBox( GetForegroundWindow(), "could not find valid d3d9.dll create device address", "dForce.dll", MB_ICONSTOP );
return FALSE;
}
CreateDevice_Det.Detour( (LPBYTE)lpAddr, (LPBYTE)Direct3DCreate9_Hook );
CString strDetoured;
strDetoured.Format( "CreateDevice Hooked! Address: %x", (LPVOID)lpAddr );
MessageBox( GetForegroundWindow(), strDetoured, "dFoce.dll", MB_ICONINFORMATION );
}break;
}
return TRUE;
}

Я подключил другие функции, такие как LoadLibrary (из kernel32.dll) с таким же успехом, эта DLL, конечно, загружается раньше Direct3DCreate9 в основной программе я также пробовал это на консольной программе wi32, но моя подключенная функция все еще не вызывается. Я что-то пропустил?

По-видимому, CDetour вообще не связан с MS Detours (обнаружил, что он гуглится на обходы MS).

0

Решение

Я не вижу вызовов detourTransactionBegin (), DetourUpdateThread () и DetourTransactioncommit () здесь. API-хукинг с MS Detours есть хорошее объяснение.

1

Другие решения

После Вас CreateDevice_Det.Detour( ...) Вы должны применить объезд, это не авто.
CreateDevice_Det.Apply(),

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector