全局钩子和线程钩子我们可以理解为全局和局部,钩子的范围不同而已。
优酷全部视频教程播单:http://i.youku.com/i/UNTU3NDYyODg0/playlists
交流①群:521068947
交流②群:877492966
511遇见QQ: 272586593
511遇见QQ: 906125731
1、当一个进程里开启了全局和线程钩子后
2、先执行线程钩子
3、后执行全局钩子
4、全局的钩子属于低级,系统,级别高于线程
5、但全局钩子系统资源占有厉害
6、能线够用线程Hook实现就最好用线程Hook
7、无论什么钩子,不使用时要及时卸载钩子!!!!!
8、不同的钩子,它的回调函数都不一样,可能用到结构体也当然不同!!!
9、消息队列是以线程为基础的.一个局部HOOK勾挂的是一个进程内全部线程的消息.
10、此类实现因为不涉及进程CONTEXT切换,是轻量极的HOOK.
11、全局的HOOK会映射到全部载入USER32.DLL的进程中,事实上是USER32.DLL为这些进程调用LOADLIBRARY来载入HOOK所在的DLL.
12、而且在全部的消息在被送到消息处理前先调用HOOKPROC.当HOOKPROC决定该消息已经被处理完成,那么就从线程消息队列里去除该消息.
13、HOOKPROC本身的调用依照被载入的先后次序从后到前备调用.
14、如果对于同一事件(如鼠标消息)既安装了线程钩子又安装了系统钩子,那么系统会自动先调用线程钩子,然后调用系统钩子。
15、对同一事件消息可安装多个钩子处理过程,这些钩子处理过程形成了钩子链。当前钩子处理结束后应把钩子信息传递给下一个钩子函数。
而且最近安装的钩子放在链的开始,而最早安装的钩子放在最后,也就是后加入的先获得控制权,有点儿栈的意思。
16、钩子特别是系统钩子会消耗消息处理时间,降低系统性能。只有在必要的时候才安装钩子,在使用完毕后要及时卸载