1
0
mirror of https://github.com/FunkyFr3sh/cnc-ddraw.git synced 2025-03-24 17:49:52 +01:00

hook only when a new module was loaded

This commit is contained in:
FunkyFr3sh 2023-10-23 13:38:24 +02:00
parent df52dd869a
commit 8d64f660ec

View File

@ -994,96 +994,112 @@ HFONT WINAPI fake_CreateFontA(
HMODULE WINAPI fake_LoadLibraryA(LPCSTR lpLibFileName) HMODULE WINAPI fake_LoadLibraryA(LPCSTR lpLibFileName)
{ {
HMODULE hmod_old = GetModuleHandleA(lpLibFileName);
HMODULE hmod = real_LoadLibraryA(lpLibFileName); HMODULE hmod = real_LoadLibraryA(lpLibFileName);
#ifdef _DEBUG #ifdef _DEBUG
char mod_path[MAX_PATH] = { 0 }; char mod_path[MAX_PATH] = { 0 };
if (hmod && GetModuleFileNameA(hmod, mod_path, MAX_PATH)) if (hmod && hmod != hmod_old && GetModuleFileNameA(hmod, mod_path, MAX_PATH))
{ {
TRACE("LoadLibraryA Module %s = %p (%s)\n", mod_path, hmod, lpLibFileName); TRACE("LoadLibraryA Module %s = %p (%s)\n", mod_path, hmod, lpLibFileName);
} }
#endif #endif
if (hmod && hmod != g_ddraw_module && lpLibFileName && if (hmod && hmod != hmod_old)
(_strcmpi(lpLibFileName, "dinput.dll") == 0 || _strcmpi(lpLibFileName, "dinput") == 0 ||
_strcmpi(lpLibFileName, "dinput8.dll") == 0 || _strcmpi(lpLibFileName, "dinput8") == 0))
{ {
dinput_hook_init(); if (hmod != g_ddraw_module && lpLibFileName &&
} (_strcmpi(lpLibFileName, "dinput.dll") == 0 || _strcmpi(lpLibFileName, "dinput") == 0 ||
_strcmpi(lpLibFileName, "dinput8.dll") == 0 || _strcmpi(lpLibFileName, "dinput8") == 0))
{
dinput_hook_init();
}
hook_init(FALSE); hook_init(FALSE);
}
return hmod; return hmod;
} }
HMODULE WINAPI fake_LoadLibraryW(LPCWSTR lpLibFileName) HMODULE WINAPI fake_LoadLibraryW(LPCWSTR lpLibFileName)
{ {
HMODULE hmod_old = GetModuleHandleW(lpLibFileName);
HMODULE hmod = real_LoadLibraryW(lpLibFileName); HMODULE hmod = real_LoadLibraryW(lpLibFileName);
#ifdef _DEBUG #ifdef _DEBUG
char mod_path[MAX_PATH] = { 0 }; char mod_path[MAX_PATH] = { 0 };
if (hmod && GetModuleFileNameA(hmod, mod_path, MAX_PATH)) if (hmod && hmod != hmod_old && GetModuleFileNameA(hmod, mod_path, MAX_PATH))
{ {
TRACE("LoadLibraryW Module %s = %p\n", mod_path, hmod); TRACE("LoadLibraryW Module %s = %p\n", mod_path, hmod);
} }
#endif #endif
if (hmod && hmod != g_ddraw_module && lpLibFileName && if (hmod && hmod != hmod_old)
(_wcsicmp(lpLibFileName, L"dinput.dll") == 0 || _wcsicmp(lpLibFileName, L"dinput") == 0 ||
_wcsicmp(lpLibFileName, L"dinput8.dll") == 0 || _wcsicmp(lpLibFileName, L"dinput8") == 0))
{ {
dinput_hook_init(); if (hmod != g_ddraw_module && lpLibFileName &&
} (_wcsicmp(lpLibFileName, L"dinput.dll") == 0 || _wcsicmp(lpLibFileName, L"dinput") == 0 ||
_wcsicmp(lpLibFileName, L"dinput8.dll") == 0 || _wcsicmp(lpLibFileName, L"dinput8") == 0))
{
dinput_hook_init();
}
hook_init(FALSE); hook_init(FALSE);
}
return hmod; return hmod;
} }
HMODULE WINAPI fake_LoadLibraryExA(LPCSTR lpLibFileName, HANDLE hFile, DWORD dwFlags) HMODULE WINAPI fake_LoadLibraryExA(LPCSTR lpLibFileName, HANDLE hFile, DWORD dwFlags)
{ {
HMODULE hmod_old = GetModuleHandleA(lpLibFileName);
HMODULE hmod = real_LoadLibraryExA(lpLibFileName, hFile, dwFlags); HMODULE hmod = real_LoadLibraryExA(lpLibFileName, hFile, dwFlags);
#ifdef _DEBUG #ifdef _DEBUG
char mod_path[MAX_PATH] = { 0 }; char mod_path[MAX_PATH] = { 0 };
if (hmod && GetModuleFileNameA(hmod, mod_path, MAX_PATH)) if (hmod && hmod != hmod_old && GetModuleFileNameA(hmod, mod_path, MAX_PATH))
{ {
TRACE("LoadLibraryExA Module %s = %p (%s)\n", mod_path, hmod, lpLibFileName); TRACE("LoadLibraryExA Module %s = %p (%s)\n", mod_path, hmod, lpLibFileName);
} }
#endif #endif
if (hmod && hmod != g_ddraw_module && lpLibFileName && if (hmod && hmod != hmod_old)
(_strcmpi(lpLibFileName, "dinput.dll") == 0 || _strcmpi(lpLibFileName, "dinput") == 0 ||
_strcmpi(lpLibFileName, "dinput8.dll") == 0 || _strcmpi(lpLibFileName, "dinput8") == 0))
{ {
dinput_hook_init(); if (hmod != g_ddraw_module && lpLibFileName &&
} (_strcmpi(lpLibFileName, "dinput.dll") == 0 || _strcmpi(lpLibFileName, "dinput") == 0 ||
_strcmpi(lpLibFileName, "dinput8.dll") == 0 || _strcmpi(lpLibFileName, "dinput8") == 0))
{
dinput_hook_init();
}
hook_init(FALSE); hook_init(FALSE);
}
return hmod; return hmod;
} }
HMODULE WINAPI fake_LoadLibraryExW(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags) HMODULE WINAPI fake_LoadLibraryExW(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags)
{ {
HMODULE hmod_old = GetModuleHandleW(lpLibFileName);
HMODULE hmod = real_LoadLibraryExW(lpLibFileName, hFile, dwFlags); HMODULE hmod = real_LoadLibraryExW(lpLibFileName, hFile, dwFlags);
#ifdef _DEBUG #ifdef _DEBUG
char mod_path[MAX_PATH] = { 0 }; char mod_path[MAX_PATH] = { 0 };
if (hmod && GetModuleFileNameA(hmod, mod_path, MAX_PATH)) if (hmod && hmod != hmod_old && GetModuleFileNameA(hmod, mod_path, MAX_PATH))
{ {
TRACE("LoadLibraryExW Module %s = %p\n", mod_path, hmod); TRACE("LoadLibraryExW Module %s = %p\n", mod_path, hmod);
} }
#endif #endif
if (hmod && hmod != g_ddraw_module && lpLibFileName && if (hmod && hmod != hmod_old)
(_wcsicmp(lpLibFileName, L"dinput.dll") == 0 || _wcsicmp(lpLibFileName, L"dinput") == 0 ||
_wcsicmp(lpLibFileName, L"dinput8.dll") == 0 || _wcsicmp(lpLibFileName, L"dinput8") == 0))
{ {
dinput_hook_init(); if (hmod != g_ddraw_module && lpLibFileName &&
} (_wcsicmp(lpLibFileName, L"dinput.dll") == 0 || _wcsicmp(lpLibFileName, L"dinput") == 0 ||
_wcsicmp(lpLibFileName, L"dinput8.dll") == 0 || _wcsicmp(lpLibFileName, L"dinput8") == 0))
{
dinput_hook_init();
}
hook_init(FALSE); hook_init(FALSE);
}
return hmod; return hmod;
} }