//检查自己的进程的父进程
procedure CheckParentProc;
var //检查自己的进程的父进程
    Pn: TProcesseNtry32;
    sHandle:THandle;
    H,ExplProc,ParentProc:Hwnd;
    Found:Boolean;
    Buffer:array[0..1023]of Char;
    Path:string;
begin
    H:= 0;
    ExplProc:= 0;
    ParentProc:= 0;
    //得到Windows的目录;
    SetString(Path,Buffer,GetWindowsDirectory(Buffer,Sizeof(Buffer)- 1));
    Path:= UpperCase(Path)+ '\Explorer.EXE';//得到Explorer的路径
    //得到所有进程的列表快照
     sHandle:= CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
     Found:= Process32First(sHandle,Pn);//查找进程
     while Found do //遍历所有进程
     begin
         if Pn.szExeFile = ParamStr(0) then //自己的进程
         begin
           ParentProc:= Pn.th32ParentProcessID;//得到父进程的进程ID
           //父进程的句柄
           H:= OpenProcess(PROCESS_ALL_ACCESS,True,Pn.th32ParentProcessID);
         end
         else if UpperCase(Pn.szExeFile)= Path then
           begin
               ExplProc:= Pn.th32ProcessID;//Ex plorer的PID
               Found:= Process32Next(sHandle,Pn);//查找下一个
           end;
    
         //父进程不是Explorer,是调试器……
         if ParentProc <> ExplProc then
         begin
              TerminateProcess(H,0);
              while 1<>1 do
              Application.MessageBox('', '', MB_OK + MB_ICONSTOP);
         end;
     end;
end;

最后修改:2009 年 08 月 16 日
一分也是爱
  • 相关文章

    • 无相关文章