浅谈HOOK技术在VC编程中的应用

浅谈HOOK技术在VC编程中的应用

ID:46472931

大小:74.00 KB

页数:7页

时间:2019-11-24

浅谈HOOK技术在VC编程中的应用_第1页
浅谈HOOK技术在VC编程中的应用_第2页
浅谈HOOK技术在VC编程中的应用_第3页
浅谈HOOK技术在VC编程中的应用_第4页
浅谈HOOK技术在VC编程中的应用_第5页
资源描述:

《浅谈HOOK技术在VC编程中的应用》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、浅谈HOOK技术在VC编程中的应用摘要:木文针对HOOK技术在VC编程屮的应川进行讨论,并着重对应用比较广泛的全局II00K做了阐述。引言Windows操作系统是建立在事件驱动机制之上的,系统各部分之间的沟通也都是通过消息的相互传递而实现的。但在通常情况下,应用程序只能处理来自进程内部的消息或是从其他进程发过來的消息,如果需要对在进程外传递的消息进行拦截处理就必须采取一种被称为HOOK(钩子)的技术。钩子是Windows操作系统中非常重要的一种系统接口,用它可以轻松截获并处理在其他应用程序Z间传递的消息,并由此可以完成一些普通应川程序难以实现的特殊功能。基于钩子在消息拦截处理屮的强

2、人功能,本文即以VC++6.0为编程背景对钩了的基本概念及其实现过程展开讨论。为方便理解,在文章最后还给出了一个简单的有关鼠标钩子的应用示例。钩子的基木原理钩子的本质是一段用以处理系统消息的程序,通过系统调用,将其挂入到系统。钩子的种类有很多,每一种钩子负责截获并处理相应的消息。钩子机制允许应用程序截获并处理发往指泄窗口的消息或特泄事件,其监视的窗口即可以是本进程内的也可以是由其他进程所创建的。在特定的消息发出,并在到达目的窗nZ前,钩子程序先行截获此消息并得到对其的控制权。此时在钩了函数中就可以对截获的消息进行各种修改处理,甚至强行终止该消息的继续传递。任何一个钩子都由系统来维护

3、一个指针列表(钩子链表),其指针指向钩子的各个处理函数。最近安装的钩了放在链的开始,最早安装的钩了则放在最后,当钩了监视的消息出现时,操作系统调用链表开始处的第一个钩子处理函数进行处理,也就是说鼠后加入的钩子优先获得控制权。在这里提到的钩子处理函数必须是一个回调函数(callbackfunction),而月.不能定义为类成员函数,必须定义为普通的C函数。在使用钩子时町以根据具监视范I韦I的不同将具分为全局钩子和线程钩子两大类,其中线程钩子只能监视某个线程,而全局钩子则可対在当前系统下运行的所冇线程进行监视。显然,线程钩子可以看作是全局钩了的一个了集,全局钩了虽然功能强大但同时实现起

4、来也比较烦琐:其钩了函数的实现必须封装在动态链接库中才可以使用。钩子的安装与卸载由于全局钩了具有相当的广泛性而口在功能上完全覆盖了线程钩了,因此下而就主要对M川较多的全局钩子的安装与使川进行讨论。前面已经提过,操作系统是通过调川钩子链表开始处的笫一个钩了处理函数而进行消息拦截处理的。因此,为了设置钩了,只需将回调函数放置于链首即对,操作系统会使其首先被调用。在具体实现时由函数SetWindowsHookEx()负贵将冋调函数放置于钩了链农的开始位置。SetWindowsHookEx()函数原型声明如F:HHOOKSetWindowsHookEx(intidHook;IIOOKPRO

5、Clpfn;HINSTANCEhMod;DWORDdwThreadld);其中:参数idHook指定了钩子的类型,总共有如下13种:HI_CALLWNDPROC系统将消息发送到指处窗口之前的〃钩子〃WH_CALLWNDPROCRET消息已经在窗口中处理的〃钩子〃WII.CBT基于计算机培训的〃钩子〃WHDEBUG差错〃钩子〃WILFOREGROUNDIDLE前台空闲窗口〃钩了〃WH_GETMESSAGE接收消息投递的〃钩子〃WII_JOURNALPLAYBACK回放以前通过WH_JOURNALRECORD〃钩子〃记录的输入消息WII_JOURNALRECORD输入消息记录〃钩子"

6、WII_KEYBOARD键盘消息〃钩了”WILM0USE鼠标消息〃钩子〃WIIJ1SGFILTER对话框、消息框、菜单或滚动条输入消息〃钩子〃WILSHELL外壳〃钩子〃WII_SYSMSGFILTER系统消息"钩子〃参数lpfn为指向钩子处理函数的指针,即回调函数的首地址;参数h1od则标识了钩子处理函数所处模块的句柄;笫四个参数dwThreadld指定被监视的线程,如果明确指定了某个线程的TD就只监视该线程,此吋的钩子即为线程钩子;如杲该参数被设置为0,则表示此钩子为监视系统所有线程的全局钩子。此函数在执行完后将返回一个钩子句柄。虽然对于线稈钩了并不要求其象全局钩了一样必须放

7、置于动态链接库中,但是推荐其也在动态链接库中实现。因为这样的处理不仅可使钩子对为系统内的多个进程访问,也町以在系统中被肓接调用,而且对于一个只供单进程访问的钩子,还可以将具钩子处理过程放在安装钩子的同-个线程内,此时SetWindowsHookExO函数的第三个参数也就是该线程的实例句柄。在SetWindowsIIookExO函数完成对钩子的安装后,如果被监视的事件发生,系统马上会调用位于相应钩子链表开始处的钩子处理函数进行处理,每一个钩子处理函数在进行相应的处理时都

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。