#include <set>\r
#define WIN32_LEAN_AND_MEAN \r
#include <windows.h>\r
+#include <delayimp.h>\r
#include <minHook/newMinHook.h>\r
#include "nvdaControllerInternal.h"\r
#include <common/log.h>\r
\r
moduleSet_t g_hookedModules;\r
functionSet_t g_hookedFunctions;\r
+HMODULE minhookLibHandle=NULL;\r
\r
bool apiHook_initialize() {\r
LOG_DEBUG("calling MH_Initialize");\r
int res;\r
wstring dllPath=dllDirectory;\r
dllPath+=L"\\minhook.dll";\r
- LoadLibrary(dllPath.c_str());\r
+ if((minhookLibHandle=LoadLibrary(dllPath.c_str()))==NULL) {\r
+ LOG_ERROR(L"LoadLibrary failed to load "<<dllPath);\r
+ return false;\r
+ }\r
if ((res=MH_Initialize())!=MH_OK) {\r
LOG_ERROR("MH_CreateHook failed with " << res);\r
return false;\r
FreeLibrary(*i);\r
}\r
g_hookedModules.clear();\r
+ if(minhookLibHandle) FreeLibrary(minhookLibHandle);\r
+ if(!__FUnloadDelayLoadedDLL2("minHook.DLL")) {\r
+ LOG_ERROR(L"__FUnloadDelayLoadedDLL2 failed to unload minhook.dll");\r
+ }\r
return TRUE;\r
}\r
nvdaInProcUtilsRPCServerSource,\r
"nvdaHelperRemote.def",\r
],\r
- LINKFLAGS="${LINKFLAGS} /delayload:minhook.dll",\r
+ LINKFLAGS="${LINKFLAGS} /delayload:minhook.dll /delay:unload /delay:nobind",\r
LIBS=[\r
minHookLib[1 if 'symbols' not in env['nvdaHelperDebugFlags'] else 2],\r
"delayimp.lib",\r