最近做一个服务器程序,需要实现如下功能: 但程序运行之后驻留在内存,其他进程启动后,程序显示加载的进程ID,当进程退出的时候,程序显示终止进程的ID号,有点象任务管理器。我想过用enumprocess/CreateToolhelp32Snapshot来实现,但效率很低,后来想到用PsSetCreateProcessNotifyRoutine(),但只在winnt/2000下才有效,有没有其它方法来实现??? 这个问题已经困扰了我很久,一直没找到理想的解决方案,望提供思路

解决方案 »

  1.   

    PrcView是个什么工具? 能不能说详细点
      

  2.   

    ProcView:一款内存监控软件用户可以对内存中的程序进行查看,顺序排列,删除,等操作
    http://www.newhua.com/soft/4616.htm
      

  3.   

    http://www.codeproject.com/threads/procmon.asp?target=detecting%7Cprocess,没有其它办法吗?
      

  4.   

    http://expert.csdn.net/Expert/topic/2254/2254497.xml?temp=.6139185使用APIHOOK,拦截CreateProcess好象不行,有没有什么办法挂接到kernel32进程里面去,如果可以就很好解决了,请高手说话
      

  5.   

    应该使用hook,看下面的代码。BOOL DllMain(HINSTANCE hinstDLL,  // DLL module handle
        DWORD fdwReason,              // reason called 
        LPVOID lpvReserved)           // reserved 

        switch (fdwReason) 
        { 
            // The DLL is loading due to process 
            // initialization or a call to LoadLibrary. 
     
              case DLL_PROCESS_ATTACH: 
                 // 当一个进程被创建后,会执行这里。
                break;
            case DLL_THREAD_ATTACH: 
                break; 
      
            case DLL_THREAD_DETACH: 
                break; 
     
            case DLL_PROCESS_DETACH: 
     
                  // 当一个进程结束后,会执行这里。
                break; 
     
            default: 
              break; 
         } 你可以在这个hook dll里获得当前进程的ID,然后通过管道或网络连接的方式传递给服务器程序。
      

  6.   

    ColderRain(一切尽在不言中): 你说的方法不太明白? 能具体点吗?
      

  7.   

    hook CreateProcess[Ex]() ExitProcess()那几个apiColderRain(一切尽在不言中) 说的dll方法不行,因为DLL只有detach消息,这样不能分辨除freelibrary和exitprocess。enumprocess/CreateToolhelp32Snapshot当然也可以,每秒调一次的话没什么效率问题。(你要是来个while(1)那就肯定不行了)
      

  8.   

    谢谢 Kevin_qing(),难道就没有办法hook到 CreateProcess吗? 想想也是,要是能hook到CreateProcess,系统就没有安全性可言了
      

  9.   

    TO: Kevin_qing() ,你好
    hook CreateProcess[Ex]() ExitProcess()可以实现,但对System,SMSS.exe几个关键进程不起作用(WIN2KSP4),有没有办法获得获得它们的权限??