学习钩子(Hook)过程中遇到的一些问题

原创 2012年04月30日 17:37:20

1 . AFX_EXT_CLASS 是什么

扩展DLL使用 AFX_EXT_CLASS 宏导出类;链接到扩展 DLL 的可执行文件使用该宏导入类。 用于生成扩展 DLL 的相同头文件可通过 AFX_EXT_CLASS 宏与链接到 DLL 的可执行文件一起使用。

在写钩子类的时候需要用到这个关键字。


2. pragma是什么

它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。


3. 定义数据段
#pragma data_seg("mydata")

// definition of data which will store in data segment "mydata"

#pragma data_seg()

参考资源:《vc++深入详解》【孙鑫】,MSDN: data_seg


4. DEF 文件 是什么
模块定义 (.def) 文件为链接器提供有关被链接程序的导出、特性及其他方面的信息。 生成 DLL 时,.def 文件最有用。 由于存在可代替模块定义语句使用的链接器选项,通常不需要 .def 文件。

参考资料:MSDN:模块定义文件


5. SetWindowsHookEx 函数
函数原型:
HHOOK WINAPI SetWindowsHookEx(
  __in  int idHook,
  __in  HOOKPROC lpfn,
  __in  HINSTANCE hMod,
  __in  DWORD dwThreadId
);

函数功能:安装钩子
参数解释:
idHook: 安装的钩子类型,例如钩子用来监视鼠标消息,则值为WH_MOUSE,若用来监视键盘消息,则值为WH_KEYBOARD
  lpfn:  钩子程序的处理过程,例如鼠标钩子处理过程的原型为
LRESULT CALLBACK MouseProc(
  __in  int nCode,
  __in  WPARAM wParam,
  __in  LPARAM lParam
);

从CALLBACK可以看出这是一个回调函数,当被监视的程序处理鼠标消息时,这个函数会被系统调用,无需我们自己调用。注意函数的名字不一定是MouseProc,但是参数类型要一致。另外,还需要注意,这个函数只能定义成普通的c函数,而不能定义成某个类的成员函数。
hMode: 
dwThreadId:
dwThreadId表示钩子程序要与哪个线程相关联,如果这是一个线程钩子,用于监视本线程及其产生的线程,(例如使用GetCurrentThreadId()函数得到当前线程),那么hMode的值为0;如果这是一个系统钩子,用于监视所有指定类型消息,那么由于系统钩子必须使用独立的动态链接库,dwThreadId的值为0, hMode的值为DLL的DllMain()函数传过来的参数hinstDLL的值,
此函数原型为
BOOL WINAPI DllMain(
  __in  HINSTANCE hinstDLL,
  __in  DWORD fdwReason,
  __in  LPVOID lpvReserved
);

关于DLLMain,详见:MSDN: DllMain entry point

其它:
注意钩子使用完毕,要使用UnhookWindowsHookEx函数卸载钩子。
注意钩子处理过程lpfn最后一般需要
return CallNextHookEx(...);

关于CallNextHookEx详见MSDN:CallNextHookEx

6. 使用DLL文件时的设置
   dll文件:复制到使用这个dll文件的应用程序同目录下
   lib文件:以vs2010为例,右击项目 -> 属性 -> 链接器->输入->附加依赖项,将lib文件路径添加进来


注:此文不断更新

全文参考资料:


学习JS中遇到的一些问题(读书笔记)

一.之前重装过一次系统,Notepad++还在,不过右键直接用Notepad++打开的方式不在了,上网找了一下方法 1.左下角点击“开始”->运行->regedit,打开注册表编辑器 2.在HKEY_...
  • mazicwong
  • mazicwong
  • 2016年10月09日 16:09
  • 455

js的事件捕获和事件冒泡学习心得

事件捕获和事件冒泡是两种完全相反的事件模型。 比如:      "fdsfsdf" 最里面的 我们做一个测试,为这个三层标签全部绑定click方法,如下 var yeye=document.g...
  • zhangyangblog
  • zhangyangblog
  • 2017年07月06日 14:11
  • 92

入门程序员在开发过程中遇到的困难

(1). 需求理解不足,沟通不畅,往往是入门程序员遇到的最大障碍,导致后期不断返工 (2). 对框架,技术实现的理解不足,尤其是对一些基础知识的掌握不足,容易导致开发过程中不顺畅,对...
  • u011202334
  • u011202334
  • 2015年06月15日 20:45
  • 412

HOOK钩子机制

最近在看一些编程相关的书籍和资料,知识碰见了,就想把它记下来,以便日后能用的上,也可能只是浅显的概念!可能有错,但是有值得参考的地方,慢慢充电吧! 一、理解:钩子,顾名思义就是钩东西的,...
  • gogoky
  • gogoky
  • 2016年05月03日 20:44
  • 1844

钩子编程(HOOK) 安装系统全局钩子 (3)

[钩子编程(HOOK) 安装系统全局钩子]全局钩子,钩子一词多用于计算机编程中,英文叫hook,指利用api来提前拦截并处理windows消息的一种技术。如键盘钩子,许多木马都有这东西,监视你的键盘操...
  • u012339743
  • u012339743
  • 2014年05月15日 11:17
  • 5480

HTML学习中遇到的问题记录

1、在table中经常定义 thead、tbody 以及 tfoot三个标签: thead、tfoot 以及 tbody 元素使您有能力对表格中的行进行分组。当您创建某个表格时,您也许希望拥有一个标题...
  • qq_30337695
  • qq_30337695
  • 2015年12月16日 15:50
  • 512

HOOK钩子技术2 内联钩子Inline HOOK 通过DLL注入

dll注入很有意思,它最大的优势在于一旦这个dll被注入,就可以访问宿主程序整个内存空间。因此直接的操作dll是可以达到间接操作目标宿主程序的作用。这次继续使用CILHook类,不过这次是在目标程序内...
  • wang471003247
  • wang471003247
  • 2015年05月02日 22:37
  • 1238

控制台程序安装全局钩子

   今天在写一个程序的时候发现的问题,在以前的学习过程中没有遇到过,所以记录以备后查程序大致是这样的 A:主程序 控制台程序 负责安装一个WH_KEYBOARD_LL钩子,其中钩子的安装于回调函数在...
  • cmdhack
  • cmdhack
  • 2011年01月12日 19:15
  • 2551

钩子技术介绍(HOOK 编程)

【什么是HOOK API】 HOOK(钩子,挂钩)是一种实现Windows平台下类似于中断的机制[24]。HOOK机制允许应用程序拦截并处理Windows消息或指定事件,当指定的消息发出后,HOOK...
  • hellokandy
  • hellokandy
  • 2017年05月25日 23:14
  • 2420

discuz 添加自定义钩子hook

Hook位置在comment_li.htm,代码        reply_middle_geetest}--> 插件的测试代码 class plugin_freeng_portal extend...
  • jazywoo123
  • jazywoo123
  • 2013年10月22日 15:57
  • 5082
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:学习钩子(Hook)过程中遇到的一些问题
举报原因:
原因补充:

(最多只允许输入30个字)