hook即钩子技术,它钩取某个特定的事件,然后在默认的事件处理之外,进行一些自定义的处理,感觉这种行为有点类似插桩。。
消息hook
微软为Windows提供了几个消息hook的API,主要是以下三个:
-
SetWindowsHookEx
-
UnhookWindowsHookEx
-
CallNextHookEx
这种hook技术是对Windows消息进行钩取。众所周知,Windows窗口程序是通过消息驱动的,系统维护了一个消息队列,每当窗口发出新的消息时,系统就把这个消息加入消息队列中,对每个窗口的消息都有特定的消息处理程序,来对消息进行响应。消息hook技术就是对这些进行消息进行钩取,它针对某一类消息,钩取消息后去执行自定义的消息处理函数,而非程序原本的处理函数。
SetWindowsHookEx函数是设置钩子,定义如下
HHOOK SetWindowsHookExA(
int idHook,
HOOKPROC lpfn,
HINSTANCE hmod,
DWORD dwThreadId
);
SetWindowsHookEx函数设置某种消息的控制函数,并指定相关线程。根据钩子的作用范围的不同,可以分为局部钩子和全局钩子,局部钩子仅针对某一线程,而全局钩子则对所有基于消息机制的应用均有效,由于全局钩子需要访问多个进程空间,所以必须作为DLL文件,系统为了成功设置钩子,会将DLL文件加载到对应进程空间中,因此也全局钩子常常作为DLL注