用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的方法,自已定义函数了
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的方法,自已定义函数了
所以不能用他们
没办法么?
而且,不适合你做的就是读取EProcess结构的PPID信息,呵呵,访问EProcess再内核区需要Ring0权限
用NTDDK才能做到(驱动模式)
就可以检测了