windows 全局hook
来源:互联网 发布:淘宝权女朋友静雯 编辑:程序博客网 时间:2024/06/13 12:18
最近有用到全局hook,其实可参考windows核心编程,全局hook也是Dll注入的一种方式。
首先,必须是一个Dll,可导出一个接口,在其中设置全局hook,类型为WH_GETMESSAGE(这样,应该是所有进程都会被hook到了),这样成功后,系统会把这个Dll注入到有getmessage的所有进程中,即会为每个进程隐式调用下loadlibrary。
然后每次getmessage时,都会回调进回调函数中,你就可以做一些自己的处理了。
当不需要hook时,可通过unhook,这样系统会为那些hook上的进程隐式调用freelibrary,卸载掉dll。
我们设 设置hook的进程为 P,hook Dll为D,则经试验发现,
即使是P退出前不调用 D的unhook,或P被强杀或挂掉,系统仍然会发现,仍然会帮着为那些hook上的进程调用freelibrary,也就是会进入到D的proc_detach中。
不过也会有些意外,偶尔有些进程也会未卸载掉D,比如chrome、svncache,或者需要点时间才能卸掉的其他进程 (但64位系统貌似没问题?)。
static HHOOK _myHook = NULL; LRESULT CALLBACK MyHookProc( _In_ int nCode, _In_ WPARAM wParam, _In_ LPARAM lParam ){ return CallNextHookEx(NULL, nCode, wParam, lParam);// HHOOK parameter is optional and ignored}bool hookStart(){ if (_myHook) return true; _myHook = SetWindowsHookEx( WH_GETMESSAGE, (HOOKPROC)&MyHookProc, GetMainDll(), 0); if (NULL == _myHook) { assert(false && "[hookStart]hook false!"); return false; } return true;}bool hookEnd(){ if (NULL == _myHook) return true; if (FALSE == UnhookWindowsHookEx(_myHook)) { assert(false && "[hookEnd]unhook false!"); return false; } _myHook = NULL; return true;}
0 0
- windows 全局hook
- Windows 全局钩子 Hook 详解
- 全局Hook
- HOOK全局键盘钩子
- 鼠标键盘全局HOOK
- HOOK编程 ----全局钩子
- 使用全局的 HOOK
- 全局hook键盘消息
- Windows Hook
- windows hook
- Hook :挂钩 NtResumeThread 实现全局Hook
- Hook技术2:全局钩子
- 挂钩 NtResumeThread 实现全局Hook
- C#全局鼠标键盘Hook
- vc++实现Ring3全局HOOK
- vc++实现Ring3全局HOOK
- C#全局鼠标键盘Hook
- 全局HOOK的实现学习!
- Word转换成PDF转换器教程
- wget 命令用法详解
- ubuntu14.04开热点共享网络
- Log4j1.x和2.x使用详解总结
- 社説 20150212 G20共同声明 成長回復の具体策が問われる
- windows 全局hook
- CSS网页布局基础
- Mac 系统启用root用户
- 前言(CSDN也有Markdown了,好开森)
- 自定义OpenFileDialog
- Android多媒体学习六:利用Service实现背景音乐的播放
- 刷leetcode:Reverse Integer
- 线程池处理多线程
- 吐槽支付宝红包:逼公鸡下蛋的后果