我按照网上的方法把一个DLL注入到一个进程里,以来截获Send,Recv等消息
比如A.exe是我的程序。主要用来把Hook.dll注入到另外的一个进程c.exe(这个程序不是做的),如果不关A.exe,那能截获到c.exe的这些消息,如果把A.exe关掉。就不能截获到了
请问是怎么回事呢?
我A.exe里的注入代码如下:
STARTUPINFO startup;
ZeroMemory( &startup, sizeof(startup) );
startup.dwFlags = STARTF_USESHOWWINDOW;
startup.wShowWindow = SW_SHOW;
startup.cb = sizeof(startup);
PROCESS_INFORMATION info;
if (CreateProcess("d:\\abc\\c.exe",NULL,NULL,NULL,TRUE,0,NULL,NULL,&startup,&info) == 0)
return FALSE;
         Sleep(3000);

HINSTANCE hdll;
hdll = LoadLibrary("Hook.dll");
    if(hdll == NULL)
        MessageBox("LoadLibrary"); typedef BOOL (_stdcall *InstallHook)(DWORD dwThreadId);
InstallHook Set ;
Set = (InstallHook)GetProcAddress(hdll,"InstallHook");
if (!Set(info.dwThreadId))
{
MessageBox("InstallHook Error");
}
请问有什么问题吗?

解决方案 »

  1.   

    可能你使用的那个dll“Hook.dll”被free时会自己卸载hook
      

  2.   

    我这里没有自己写Free呢。请问怎么解决呢?
      

  3.   

    你关掉自己那个程序时候,你Load的dll当然会自动被free要解决,要自己实现那个dll的功能
      

  4.   

    让c.exe执行这些注入代码不就可以了吗?自己注入自己,呵呵详情请参考:http://pgy12345.googlepages.com/inject
      

  5.   

    在你的HookProc里面做如下的操作就能解决你的问题:LoadLibrary("Hook.dll");           //增加dll引用记数
    UnhookWindowsHookEx(glhHook);      //卸栽当前钩子
    glhHook = SetWindowsHookEx(WH_GETMESSAGE, HookProc, AfxGetInstanceHandle(), dwThreadId);                       //重新挂接钩子