`
explorer
  • 浏览: 95887 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

nt上获取父进程

阅读更多

用ToolHelp APi 取进程列表,获取父进程的代码, NT下无效

 
  1. uses TLHelp32  
  2.   
  3.   
  4.   tagPROCESSENTRY32 = packed record  
  5.     dwSize: DWORD;  
  6.     cntUsage: DWORD;  
  7.     th32ProcessID: DWORD;       // this process  
  8.     th32DefaultHeapID: DWORD;  
  9.     th32ModuleID: DWORD;        // associated exe  
  10.     cntThreads: DWORD;  
  11.     th32ParentProcessID: DWORD// this process's parent process  
  12.     pcPriClassBase: Longint;    // Base priority of process's threads  
  13.     dwFlags: DWORD;  
  14.     szExeFile: array[0..MAX_PATH - 1] of Char;// Path  
  15.   end;  
  16.   
  17. var  
  18.   Pn: TProcesseNtry32;  
  19.   sHandle: THandle;  
  20.   ..  
  21. begin  
  22.   ...  
  23.   sHandle := CreateToolHelp32SnapShot(TH32CS_SNAPALL, 0);  
  24.   Found := Process32First(sHandle, Pn);  
  25.   while Found do  
  26.   begin  
  27.     PnName:= UpperCase(ExtractFileName(Pn.szExeFile));  
  28.     if PnName = UpperCase(ExtractFileName(ParamStr(0))) then  
  29.     begin  
  30.       ParentProc := Pn.th32ParentProcessID;  
  31.     ...  
  32.     Found:= Process32Next(sHandl, Pn);  
  33.   end;  

所以用nt.dll 中 NtQueryInformationProcess 又写了一个

 
  1. {*******************************************************}  
  2. {                                                       }  
  3. {  Parent_P.dpr                                         }  
  4. {    show How can retrive parent process ID on WinNT    }  
  5. {                                                       }  
  6. {  (c) by explorer 20070905                             }  
  7. {                                                       }  
  8. {  http://explorer.iteye.com                          }  
  9. {                                                       }  
  10. {*******************************************************}  
  11.   
  12.   
  13. program parent_P;  
  14.   
  15. {$APPTYPE CONSOLE}  
  16.   
  17. uses  
  18.   SysUtils,  
  19.   Windows;  
  20.   
  21. type  
  22.   PROCESS_BASIC_INFORMATION = packed Record  
  23.     ExitStatus: DWORD;  
  24.     PebBaseAddress: DWORD;  
  25.     AffinityMask: DWORD;  
  26.     BasePriority: DWORD;  
  27.     UniqueProcessId: ULONG;  
  28.     InheritedFromUniqueProcessId: ULONG;  
  29.   end;  
  30.   
  31. type  
  32.   TNtQueryInformationProcess = function (ProcessHandle: THANDLE; InformationClass: UINT;  
  33.     ProcessInformation: Pointer; ProcessInformationLength: uLong; ReturnLength: PULONG): DWORD stdcall;  
  34.       
  35. Const  
  36.   ProcessBasicInformation = 0;  
  37.   
  38. // ntdll!NtQueryInformationProcess (NT specific!)  
  39. //  
  40. // The function copies the process information of the  
  41. // specified type into a buffer  
  42. //  
  43. // NTSYSAPI  
  44. // NTSTATUS  
  45. // NTAPI  
  46. // NtQueryInformationProcess(  
  47. //    IN HANDLE ProcessHandle,              // handle to process  
  48. //    IN PROCESSINFOCLASS InformationClass, // information type  
  49. //    OUT PVOID ProcessInformation,         // pointer to buffer  
  50. //    IN ULONG ProcessInformationLength,    // buffer size in bytes  
  51. //    OUT PULONG ReturnLength OPTIONAL      // pointer to a 32-bit  
  52. //                                          // variable that receives  
  53. //                                          // the number of bytes  
  54. //                                          // written to the buffer   
  55. // );    
  56.   
  57. function GetParentProcessID(dwId: DWORD):DWORD;  
  58. var  
  59.   NtQueryInformationProcess: TNtQueryInformationProcess;  
  60.   hProcess: THandle;  
  61.   status: DWORD;  
  62.   pbi: PROCESS_BASIC_INFORMATION;  
  63. begin  
  64.   Result:= High(DWORD);  
  65.     
  66.   @NtQueryInformationProcess:= GetProcAddress(GetModuleHandle('ntdll'),  
  67.                                               Pchar('NtQueryInformationProcess'));  
  68.   
  69.   if Assigned(NtQueryInformationProcess) then begin  
  70.   
  71.     hProcess := OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, dwId);  
  72.     if Not LongBool(hProcess) then Exit;  
  73.   
  74.     status:= NtQueryInformationProcess(hProcess,  
  75.                                        ProcessBasicInformation,  
  76.                                        Pointer(@pbi),  
  77.                                        Sizeof(PROCESS_BASIC_INFORMATION),  
  78.                                        nil);  
  79.   
  80.     if Not LongBool(status) then  
  81.       Result:= pbi.InheritedFromUniqueProcessId;  
  82.   
  83.     CloseHandle(hProcess);    
  84.   end;  
  85. end;  
  86.   
  87. var  
  88.   dwID: DWORD;  
  89.   
  90. begin  
  91.   { TODO -oUser -cConsole Main : Insert code here }  
  92.   if ParamCount < 1 then begin  
  93.     Writeln('Usgae parent_P ProcId '#13#10);  
  94.     Exit;  
  95.   end;  
  96.                                               
  97.   dwID:= StrToIntDef( ParamStr(1) , 0);  
  98.   
  99.   Writeln(Format('Parent PID for %d is %d', [dwId, GetParentProcessID(dwId)]) );  
  100. end.  



分享到:
评论

相关推荐

    获取父进程的ID.获取父进程ID的代码 NtQueryInformationProces

    总结来说,获取父进程ID的关键在于使用`NtQueryInformationProcess` API,并指定`ProcessBasicInformation`来获取进程的基本信息,其中包含了父进程的唯一标识。这个过程需要对Windows内核编程有一定的理解,但是...

    NT下进程枚举.rar

    它们包含如进程ID、父进程ID、进程名、内存使用情况等数据。 3. **权限与访问令牌**: 枚举进程可能需要特定的权限,如`SeDebugPrivilege`,这个特权允许用户查看其他用户的进程信息。使用`AdjustTokenPrivileges`...

    进程防杀 Hook OpenProcess

    通过调用OpenProcess,一个进程可以获取另一个进程的句柄,进而读取、写入其内存,甚至控制其执行。Hook OpenProcess即是在这个系统调用上设置“钩子”,在其他程序尝试访问或操作目标进程时,先于原功能执行自定义...

    ZwQuerySystemInformation 查看系统进程信息

    - **调试与分析**: 在调试过程中,查看进程上下文,帮助定位问题。 - **安全分析**: 检测恶意进程,防止或检测潜在的攻击。 - **性能优化**: 分析进程资源消耗,优化软件性能。 ### 注意事项 - **权限限制**: 不...

    NTAPI取进程列表.rar

    这个结构体包含了大量的进程相关数据,如进程ID、父进程ID、进程名、虚拟内存使用情况等。在易语言源码中,需要定义并填充这个结构体来接收`NtQuerySystemInformation`返回的结果。 调用`NtQuerySystemInformation`...

    NtQuerySystemInformation判断线程是否被挂起/判断线程状态

    4. **挂起态(Suspended)**:线程被挂起,不会占用CPU资源,通常由调试器或父进程操作。 判断线程是否被挂起,主要看`ThreadState`字段是否等于`THREAD_STATE_SUSPENDED`。如果线程被挂起,其值会是这个状态。此外...

    Windows XP进程树的妙用

    在Windows XP系统中,一个进程可以启动其他进程,这些新启动的进程被视为原进程的子进程,而原来的进程则是父进程。这样的关系形成了一棵由父进程和其子进程组成的树状结构,即“进程树”。这种结构有助于理解进程间...

    通过进程句柄取得PID的软件源码

    6. **InheritedFromUniqueProcessId**:创建此进程的父进程的PID。 ### 三、代码实现步骤 1. **定义`PROCESS_INFOCLASS`枚举**:用于指定要查询的信息类别。 2. **声明`ZwQueryInformationProcess`函数**:通过`...

    labview获取子窗口句柄FindwindowsEX(API).vi

    Windows NT5.0 and later:如果hwndParent是HWND_MESSAGE,函数仅查找所有消息窗口。 (2)hwndChildAfter :子窗口句柄。查找从在Z序中的下一个子窗口开始。子窗口必须为hwndParent窗口的直接子窗口而非后代窗口。...

    易语言遍历CSRSS进程源码.zip

    3. **遍历操作**:遍历所有进程,检查每个进程的属性,如进程ID、父进程ID、创建时间等,这些信息可能被收集并显示在控制台或用户界面中。 4. **错误处理**:在遍历过程中,可能会遇到权限问题或其他错误,因此源码...

    PSFilter进程过滤

    当新的进程被创建时,`PSFilter`驱动的回调函数会被调用,从而可以检查新进程的属性,如进程名、父进程ID、创建时间等。此外,驱动还可以根据这些信息执行相应的操作,例如阻止特定进程的创建,记录进程活动,或者...

    计算机操作系统复习题.pdf

    3. 错误,父进程终止并不一定导致所有子孙进程终止,除非系统配置为强制回收子孙进程。 4. 错误,线程拥有部分系统资源,如栈空间。 5. 正确,线程是操作系统调度的基本单位。 6. 正确,同一进程内的多个线程可以...

    PYTHONOS模块中文帮助文档[总结].pdf

    6. os.getppid():返回当前父进程的id。 7. os.getuid():返回当前进程用户的id。 8. os.getgid():返回当前进程组的id。 9. os.getenv():返回环境变量的值。 10. os.putenv():设置环境变量的值。 os模块的使用...

    python中os模块中文帮助文档.doc

    进程管理方面,os.getpid()返回当前进程的ID,os.getppid()返回父进程的ID,而os.getpgrp()和os.getpgid()则与进程组相关。在Unix系统中,os.ctermid()返回控制终端的文件名,这在处理终端交互时很有用。 os模块...

    python常用模块.pdf

    15. os.getppid():返回当前父进程的 id。 16. os.getuid():返回当前当前进程用户的 id。 17. os.getenv(varname[, value]):返回 environment 变量 varname 的值。 18. os.putenv(varname, value):设置 varname ...

    python-os模块中文帮助文档.pdf

    - `os.getpgid(pid)`、`os.getpgrp()`、`os.getpid()`、`os.getppid()`分别返回指定进程的组ID、当前进程组ID、当前进程ID和父进程ID。 - `os.getenv(varname[, value])`获取或设置环境变量。 - `os.putenv(varname,...

    病毒攻杀编程技术资料!

    [得到进程命令行] [得到进程父ID] [得到进程的模块] [得到进程的线程] [快速更改分辨率程序] [快速格式化] [快速蓝屏] [恢复Inline-Hook(Only XP SP2)] [挂起进程] [控制远程计算机] [控制鼠标] [数字签名验证] ...

    易语言 茶凉专用模块

    参数 命令行, 文本型, 可空, 附加上程序路径后的命令行参数 .参数 运行目录, 文本型, 可空, 通常留空,特殊情况下使用 .参数 进程结构, 进程结构, 参考 可空, 接收进程结构信息的变量 .子程序 创建网页快捷方式, ...

    python常用库

    - **`os.getppid()`**:返回父进程的ID。 - **`os.getpgid(pid)`**:返回指定进程的进程组ID。 - **`os.setpgid(pid, pgid)`**:将指定进程的进程组ID设置为pgid。 - **`os.waitpid(pid, options)`**:等待一个子...

Global site tag (gtag.js) - Google Analytics