From ddc555fd318ddfd0572685427854f74365cf2e5f Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 1 May 2017 16:02:21 +0100 Subject: [PATCH] Hook LoadLibrary/GetProcAddress variants in 'libraryloader' API sets --- renderdoc/os/win32/win32_hook.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/renderdoc/os/win32/win32_hook.cpp b/renderdoc/os/win32/win32_hook.cpp index eac6186da..2e140e729 100644 --- a/renderdoc/os/win32/win32_hook.cpp +++ b/renderdoc/os/win32/win32_hook.cpp @@ -728,6 +728,23 @@ void Win32_IAT_BeginHooks() s_HookData->DllHooks["kernel32.dll"].FunctionHooks.push_back( FunctionHook("GetProcAddress", NULL, &Hooked_GetProcAddress)); + for(const char *apiset : + {"api-ms-win-core-libraryloader-l1-1-0.dll", "api-ms-win-core-libraryloader-l1-1-1.dll", + "api-ms-win-core-libraryloader-l1-1-2.dll", "api-ms-win-core-libraryloader-l1-2-0.dll", + "api-ms-win-core-libraryloader-l1-2-1.dll"}) + { + s_HookData->DllHooks[apiset].FunctionHooks.push_back( + FunctionHook("LoadLibraryA", NULL, &Hooked_LoadLibraryA)); + s_HookData->DllHooks[apiset].FunctionHooks.push_back( + FunctionHook("LoadLibraryW", NULL, &Hooked_LoadLibraryW)); + s_HookData->DllHooks[apiset].FunctionHooks.push_back( + FunctionHook("LoadLibraryExA", NULL, &Hooked_LoadLibraryExA)); + s_HookData->DllHooks[apiset].FunctionHooks.push_back( + FunctionHook("LoadLibraryExW", NULL, &Hooked_LoadLibraryExW)); + s_HookData->DllHooks[apiset].FunctionHooks.push_back( + FunctionHook("GetProcAddress", NULL, &Hooked_GetProcAddress)); + } + GetModuleHandleEx( GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, (LPCTSTR)&s_HookData, &s_HookData->ownmodule);