180907(windows消息钩取)

#一、钩子
Hook,即钩子。
偷看或截取信息而在中间设置岗哨的行为叫“挂钩”,偷看或操作信息的行为就是人们常说的钩取(hooking)
GUI(图形用户界面)是以事件驱动方式工作的。当发生事件时,OS(操作系统)把事先定义好的消息发送给相应的应用程序,应用程序分析收到的信息后执行相应动作。

键盘输入事件发生时,WM_KEYDOWN被添加到[OS message queue]。OS从中取出消息,添加到相应的[application message queue]中,应用程序发现新消息,调用相应事件处理程序处理。

回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。
DLL是Dynamic Link Library的缩写,意为动态链接库。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的DLL文件就会被调用。一个应用程序可有多个DLL文件,一个DLL文件也可能被几个应用程序所共用,这样的DLL文件被称为共享DLL文件。
在windows内存中,每个文件在内存中被os使用句柄来标识。应用程序被运行时,就会使得每一个可执行文件或者dll文件拥有一个独一无二的实例句柄

Hook procedure(钩子过程)是由操作系统调用的回调函数。安装消息钩子时,“钩子”需要存在某个dll内部,且dll的实例句柄(instance handle)即是hMod。
若挂钩线程ID(dwThreadID)是0那么是全局钩子(Global Hook)。影响全部进程
当使用SetWindowsHookEx()设置好钩子之后,生成指定消息系统会将相关的dll文件强制注入(injection)相应进程,然后调用“钩子”过程。

#二、键盘消息钩取练习
(跟书上相同)