当托管它的可执行进程崩溃时,全局钩子会发生什么?

时间:2016-06-30 05:20:52

标签: c++ windows winapi hook

说,如果我在可执行程序中设置了global hook procedure

//Set global hook
hHook = ::SetWindowsHookEx(WH_KEYBOARD_LL, HookWndProc_WH_KEYBOARD_LL,
          ::GetModuleHandle(NULL), NULL);

并且此过程崩溃。

这个全局钩子会发生什么?

1 个答案:

答案 0 :(得分:0)

当线程退出时 - 系统删除这个线程创建的钩子(在win32k.FreeThreadsWindowHooks中) - 所以如果线程退出,没有UnhookWindowsHookEx就会被自动删除。进程崩溃 - >它的线程退出 - >钩被删除。所以没有什么担心系统级别不是。最糟糕的变种 - 当HookWndProc_WH_KEYBOARD_LL的线程挂起或不在循环中调用GetMessage / PeekMessage但没有死亡。在这种情况下,每个按键事件将以几秒延迟交付