《不依赖于DLL就能工作的全局钩子》由会员分享,可在线阅读,更多相关《不依赖于DLL就能工作的全局钩子(2页珍藏版)》请在金锄头文库上搜索。
1、不依赖于 DLL 就能工作的全局钩子不知道大家是通过什么开始对钩子(Hook)有了解的,我是看过 Jeffrey Richter 的WINDOWS 高级编程指南 (新版的中文译名为Windows 核心编程 ) 。在这本书里作者介绍了三种将代码注入其他进程的方法,其中一种就是使用的全局消息钩子。我就是从这本书里对全局钩子有了最初的认识。大家应该都知道,全局消息钩子要依赖于一个 DLL 才能够正常工作。于是呢,我也就理所当在地认为全局钩子都要依赖于一个 DLL 才能正常工作的,我想大部分人肯定和我一样也这么认为的。但实际上不是这样的。有某些全局钩子可以不依赖于任何 DLL 而正常工作的。这些钩子包
2、括,WH_JOURNALPLAYBACK,WH_JOURNALRECORD,WH_KEYBOARD_LL,WH_MOUSE_LL。为什么这些钩子可以不依赖于 DLL 而正常工作呢?我们可以从 MSDN 中得到答案,MSDN 中对于这四种钩子都这样的描述“This hook is called in the context of the thread that installed it.”,翻译成中文意思是钩子函数的调用是在安装钩子的线程上下文中进行的。说得更明白些,意思就是这些钩子是在哪个线程当中安装的,其钩子函数就在哪个线程中执行。所以使用这四种钩子是达不到代码注入的效果的,当然也就可以不依
3、赖于任何DLL 了。MSDN 中只对个别钩子指出了必须还是没有必要使用 DLL。下面是我给出的一个底层键盘钩子的代码示例,当然是不需要 DLL 的。/*kbhook.cpp*/#define _WIN32_WINNT 0400#define STRICT#define WIN32_LEAN_AND_MEAN#include #include #include DWORD g_main_tid = 0; HHOOK g_kb_hook = 0;BOOL CALLBACK con_handler (DWORD)PostThreadMessage (g_main_tid, WM_QUIT, 0, 0);return TRUE;