当加载它们的系统范围的钩子被卸载时,如何从所有进程中正确卸载 DLL?
来自MSDN:
您可以使用 UnhookWindowsHookEx 释放全局挂钩过程,但该函数不会释放包含挂钩过程的 DLL。这是因为全局挂钩过程在桌面中每个应用程序的进程上下文中被调用,从而导致对所有这些进程的 LoadLibrary 函数的隐式调用。由于无法为另一个进程调用 FreeLibrary 函数,因此无法释放 DLL。在显式链接到 DLL 的所有进程都已终止或调用 FreeLibrary 并且调用挂钩过程的所有进程都已恢复 DLL 外部的处理后,系统最终会释放 DLL。
所以我正在寻找的是一种检测钩子何时脱钩的方法,然后FreeLibrary
从所有被钩子的进程中调用。卸载钩子时,是否有任何其他方法可以立即卸载 DLL?