我想设置一个全局钩子,该钩子与所有线程相关,设置钩子的函数为SetHook,该函数为动态链接库Hook.dll导出的一个函数,里面有SetWindowsHookEx函数
在应用程序中调用SetHook来设置这个全局钩子,现在遇到的问题是,由于钩子就是消息,当我在程序中调用SetHook后,其它程序并不马上将Hook.dll加载到自己的进程地址空间中,我需要在我设置完全局钩子后即调用SetHook后,所有的进程能马上加载Hook.dll到自己的进程地址空间中,应该如何做?
我的想法是在SetHook中设置完钩子后,马上给所有进程发送该钩子相关的消息,以此让所有进程加载Hook.dll
Hook.dll文件
SetHook()
{
     SetWindowsHookEx(WH_SHELL,   ShellProc,   hDll,   0);//参数略
     SendMessage(HWND_BROADCAST,WM_CREATE,0,0);;//给所有进程发送消息
}
但调试程序还是没有完全映射

解决方案 »

  1.   

    之所以用WH_SHELL类型的钩子,原因是,当我设置完全局钩子后(类型为WH_SHELL),如果后面有新的进程被启动,那么会自动加载Hook.dll到该新启动进程的地址空间中,但现在的问题是,在我加载钩子之前,操作系统中已经有若干个进程了,WH_SHELL类型的钩子能保证后续启动的进程能自动加载Hook.dll,但之前的进程怎么能在我设置完钩子后映射Hook.dll到他们自己的地址空间中
      

  2.   

    用消息钩子啥的吧,不过那些console的进程就不能注入了还有其它类型吧,我没详细了解