我有一个DLL,我使用SetWindowsHookEx注入(inject)到其他进程中。在DLL中,我通过调用GetModuleHandleEx来增加模块的引用计数器,这样我就可以控制何时卸载模块。此时,来自这两个API调用的模块引用计数“应该”为2。当调用进程关闭时,它调用UnhookWindowsHookEx,将引用计数递减为1。DLL有一个线程等待一些事情,其中之一是调用的进程的句柄>设置WindowsHookEx。当进程消失时,DLL会进行一些清理,终止所有线程,清理内存和句柄,然后调用FreeLibraryAndExitThread。这会递减计数器并卸载DLL。这是我的问
不幸的是,MSDN对此还不够清楚。我正在编写一个使用全局Hook的程序,我担心如果程序异常终止(崩溃、被用户终止等)会发生什么。Windows是否会在进程终止时自动解除进程安装的全局Hook?如果不是,是否可以在另一个进程中调用UnhookWindowsHookEx()来释放钩子(Hook)?(我正在考虑在Hook线程中执行此操作,如果它检测到安装程序进程已死。)如果答案是否定的,那么在安装程序终止时保持全局Hook处于事件状态不是很危险吗?处理这种情况的标准方法是什么?我在MSDN中了解到,UnhookWindowsHookEx()不会释放在其他进程中加载的dll,但它没有说明何