BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: { DisableThreadLibraryCalls(hModule); InitializeCriticalSection(&cs_GetQueue); InitInstance(hModule); if(SUCCEEDED(PatchIat(GetModuleHandle(NULL),"kernel32.dll","GetProcAddress",(PVOID)GetProcAddress_Hooked,(PVOID *)&GetProcAddress_Original))) { DBB("GetPRocAddress hook injected"); } else { DBB("GetPRocAddress hook failed"); } if(SUCCEEDED(PatchIat(GetModuleHandle(NULL),"user32.dll","RegisterClassA",(PVOID)RegisterClass_Hooked,(PVOID *)&RegisterClass_Original))) { DBB("RegisterClass hook injected"); } else { DBB("RegisterClass hook failed"); } case DLL_PROCESS_DETACH: ExitInstance(); break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; } } return TRUE; }
FARPROC WINAPI GetProcAddress_Hooked(HMODULE hModule,LPCSTR lpProcName) { FARPROC tmp=GetProcAddress_Original(hModule,lpProcName); SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)&myFunc); DBB("GetProcAddress_Hooked("<<lpProcName<<")"); if(strcmp(lpProcName,"Direct3DCreate9")==0) { Direct3DCreate9_Original=(IDirect3D9* (WINAPI *)(UINT SDKVersion))tmp; return (FARPROC)Direct3DCreate9_Hooked; } return tmp; }