HOOKPROC是什么东西,理解不了?(c windows hook)
HOOKPROC是什么东西,理解不了?
SetWindowsHookEx 是设置一个钩子的函数,它把你定义的一个钩子,安装到视窗钩子链里去。 例如键盘输入钩子,例如鼠标输入钩子。 HOOKPROC 是一种变量类型,后面填具体的函数名,该函数返回HOOKPROC。 HINSTANCE 是视窗规定的一种变量类型(属一种句柄),指向一个应用程序实例(handle to application instance) 提示你要另写一个具体的函数: LRESULT CALLBACK my_mouse(int nCode, WPARAM wParam,, LPARAM lParam){ 这里含你钩到的处理。 CallNextHookE... // 回钩子链处理 }
(图片来源网络,侵删)进程内API “Hook”应怎么写?
dll包含代码和资源,代码可以执行,资源可以被代码所使用;
dll可以通过window hook或者注册为输入法,被系统自动加载进目标进程;
dll可以用代码主动注入到目标进程(CreateRemoteThread),相当于给它打一针;
(图片来源网络,侵删)dll进入目标进程的时候,dll的DllMain函数(类似于main函数)会被调用,这个时候可以做一些坏事,比如把系统API的入口替换成自己写的,比如替换D3D的一些函数就可以做很多事情;
系统运行过程中,这些API会被不断的调用,这个时候你的代码就可以不断地做坏事了。
怎么在DLL里写全局钩子?
要实现Win32的系统钩子,必须调用SDK中的API函数SetWindowsHookEx来安装这个钩子函数,这个函数的原型是HHOOK SetWindowsHookEx(int idHook,HOOKPROC lpfn,HINSTANCE hMod,DWORD dwThreadId);,其中,第一个参数是钩子的类型;第二个参数是钩子函数的地址;第三个参数是包含钩子函数的模块句柄;第四个参数指定监视的线程。如果指定确定的线程,即为线程专用钩子;如果指定为空,即为全局钩子。
(图片来源网络,侵删)其中,全局钩子函数必须包含在DLL(动态链接库)中,而线程专用钩子还可以包含在可执行文件中。
得到控制权的钩子函数在完成对消息的处理后,如果想要该消息继续传递,那么它必须调用另外一个SDK中的API函数CallNextHookEx来传递它。
钩子函数也可以通过直接返回TRUE来丢弃该消息,并阻止该消息的传递。
通过使用 DLL,程序可以实现模块化,由相对独立的组件组成。加载快,运行效率高,具有通用性,这是DLL的重要特点。
到此,以上就是小编对于的问题就介绍到这了,希望这3点解答对大家有用。