Windows下(最好NT/9X)通用的
如何不靠枚举进程
CreateToolhelp32Snapshot,
等得到已知PID的进程的的Parent Process ID?
要是有像GetCurrentProcessId这么简单的函数能实现最好
可以么?

解决方案 »

  1.   

    用CreateToolhelp32Snapshot已经很简单了,只要一循环
    var //检查自己的进程的父进程
        Pn:TProcesseNtry32;
        sHandle:THandle;
        ParentProc:Hwnd;
        Found:Boolean;
        Path,ss:string;
    begin
        ParentProc:=0;
        sHandle:= CreateToolHelp32SnapShot(TH32CS_SNAPALL,0);
        fillchar(pn,sizeof(pn),#0);
        pn.dwSize:=sizeof(pn);
        Found:= Process32First(sHandle,Pn);
        while Found do
        begin
           if Pn.th32ProcessID= GetCurrentProcessId() then
           begin
              ParentProc:= Pn.th32ParentProcessID;   //这里
              break;
           end  ;
       end;
    end;
    另一方法是用ntdll.dll中的NtQueryInformationProcess
    http://www.vckbase.com/bbs/prime/viewprime.asp?id=337
    那是VC的例子,在delphi中,要用动态调用dll的方法,自已定义函数了
      

  2.   

    问题是我要把这两个函数Hook掉
    所以不能用他们
    没办法么?
      

  3.   

    有别的方法,只是更难
    而且,不适合你做的就是读取EProcess结构的PPID信息,呵呵,访问EProcess再内核区需要Ring0权限
    用NTDDK才能做到(驱动模式)
      

  4.   

    HookAPI的时候验证PID把自己的程序跳掉
    就可以检测了