Windows Event Hook


发布于 2021-10-28


Windows Event Hook

SetWindowsHookEx可以安装钩子,截获到当前进程或者其他进程的窗口消息,为很多恶意程序所利用。此外还有个较少人使用的SetWinEventHook,它可以截获到当前进程或者其他进程的事件。

SetWindowsHookEx是截获消息,以WM_开头,SetWinEventHook是截获事件,以EVENT_开头。

消息可以由操作系统产生,也可以由用户触发的事件转换而来,或者由另一个消息产生。事件则是由用户(操作电脑的人)触发且只能由用户触发。所以,Chromium浏览器就通过SetWindowsHookEx监控事件,来确认是由用户的真实操作。比如 Chromium UI 模块根据窗口改变事件来计算窗口的 occlusion state,进行高效的 UI 重绘。

VOID CALLBACK WinEventsProc(HWINEVENTHOOK hWinEventHook, DWORD dwEvent,
                            HWND hwnd, LONG idObject, LONG idChild,
                            DWORD dwEventThread, DWORD dwmsEventTime) {
 ...
}


  HWINEVENTHOOK hHook = ::SetWinEventHook(
      EVENT_MIN, EVENT_MAX, NULL, WinEventsProc, 0, 0, WINEVENT_OUTOFCONTEXT);

参考