我这里有一个实例,,,里面的大部分语句都知道有什么用,,但是有点不懂作者的思路
下面是实例的下载地址
http://ccm2020.vxv.cn/11824.rar我的理解是这样的,,先从进程中找到explorer.exe这个进程,
再用内存映射,写入信息
但是后面的
//挂DLL跳板钩子
  GetMsgHookOn;
//线程消息循环(1.线程不立即结束,使得跳板钩子持续有效; 2.等待插入Explorer的新线程发来WM_QUIT)
  While GetMessage(ThreadMessage, 0, 0, 0) do;
//脱DLL跳板钩子
  GetMsgHookOff;
调用dll钩子不知道是怎么回事,,,
/////////////////////////////////////////
下面是钩子的内容
  if (TheNodeP<>nil)and(TheNodeP^.ExplorerID<>0)and
     (GetCurrentProcessId=TheNodeP^.ExplorerID)then   //是资源管理器进程
  begin
    LibraryH := LoadLibrary(Pchar(TheNodeP^.MainPath+'Insert.dll'));  //装载动态链接库
    if (LibraryH <> 0) then
      ThreadPt := GetProcAddress(LibraryH, 'ThreadPro');  //定位线程函数
    if (ThreadPt <> nil) then
      CreateThread(nil, 0, ThreadPt, nil, 0, ThreadID);   //创建新线程
  end;
  Result:= CallNextHookEx(GetMsgHook, nCode, wParam, lParam);  
////////////////////////////////////在上面的代码中用createthread函数创建线程是在哪个进程中创建的啊??
上面的代码是在Start.exe中运行的,,createthread应该是在start.exe这个进程中创建线程(我是这样理解的)
但是如果在start.exe中创建线程就不能在explorer.exe中插入线程了啊,,不明白,,应该是在explorer.exe中创建线程,但是不知道是怎么使钩子的内容在explorer.exe中运行的,,就大家帮帮忙啊,,
也许是我不知道这个钩子的作用

解决方案 »

  1.   

    你可以看下CreateRemoteThread
    这个可以在其他进程内插入你的线程
      

  2.   

    但是他用createThread确能创建啊,,,
      

  3.   

    它在建立线程的时候(CreateThread(nil,0,ThreadPt,nil,0,ThreadID);) 事实上已经是在explorer进程内了start挂了个消息钩子
      explorer处理消息的时候,会触发这个钩子,然后钩子在explorer内新建一个线程,然后发消息给start,关闭start
      

  4.   

    windows的bug
    线程经过2级创建 即使最开始的进程退出
    它仍然会在寄主的进程内运行
      

  5.   

    4楼的,你凭什么说这是一个BUG?
    因为他没按照你设想的情形进行?
    看问题客观一点,别自己想当然,乱加评论~~~~~
      

  6.   

    是不是bug不是我认定的
    你自己去其他地方搜搜吧