当用户启动一个可执行的程序的时候,先暂停该进程的启动,然后获取可执行文件的进程树的信息?
问题:如果获得一个进程的进程树呢?小弟不才,望不吝赐教!分也不多了

解决方案 »

  1.   

    用Toolhelp函数来枚举所有进程   
    PROCESSENTRY32中有父进程的PID假设当前进程A,先获取其自身PID及其父进程PID
    枚举到的进程B,若B的PID等于A的父PID,则
    若B的父PID等于A的PID,则
      

  2.   

    有个比较山赛的方法就是遍历该进程中的所有子线程,调用SupendThread();
      

  3.   

    LS说得可以实现,还可以从NTDLL.dll里面导出两个函数来用ZwSuspendProcess(暂停进程)和ZwResumeProcess(恢复进程)
    typedef DWORD(WINAPI *PFSuspendProcess)(HANDLE hProcess);
    typedef DWORD(WINAPI *PFResumeProcess)(HANDLE hProcess);
    int main(int argc, char* argv[])
    {
      PFSuspendProcess SuspendProcess;
      PFResumeProcess ResumeProcess;
      
      if(argc != 2)     {
        printf("\nParameter not enough !!!\nusage: %s process-id \n", argv[0]);
        return 0;
      }  HMODULE hNtDllLib = LoadLibrary("ntdll.dll");  SuspendProcess = (PFSuspendProcess)GetProcAddress(hNtDllLib, "ZwSuspendProcess");
      ResumeProcess = (PFResumeProcess )GetProcAddress(hNtDllLib, "ZwResumeProcess" );  if(SuspendProcess) {
        HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, atoi(argv[1]));    SuspendProcess(hProcess);
        
        printf("Press any key to resume process ...");
        getc(stdin);    ResumeProcess(hProcess);    CloseHandle(hProcess);
      }
      FreeLibrary(hNtDllLib);  getc(stdin);
      return 0;
    }