Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.224.32.86] |
|
Сообщ.
#1
,
|
|
|
Узнать родителя любого процесса можно и без перебора процессов в снимке. Например вот так:
type PROCESS_BASIC_INFORMATION = packed record ExitStatus: DWORD; PebBaseAddress: Pointer; AffinityMask: DWORD; BasePriority: DWORD; uUniqueProcessId: Ulong; uInheritedFromUniqueProcessId: Ulong; end; function NtQueryInformationProcess( ProcessHandle : THandle; ProcessInformationClass : Byte; ProcessInformation : Pointer; ProcessInformationLength : ULONG; ReturnLength : PULONG ): DWORD; stdcall; external 'ntdll.dll'; function GetOwnedProcessID(const dwProcessHandle: DWORD): DWORD; const ProcessBasicInformation = 0; var Info: PROCESS_BASIC_INFORMATION; begin Result := 0; if NtQueryInformationProcess(dwProcessHandle, ProcessBasicInformation, @Info, SizeOf(Info), nil) = NO_ERROR then Result := Info.uInheritedFromUniqueProcessId; end; Вот так будет выглядеть получение родителя от текущего процесса: procedure TForm1.Button1Click(Sender: TObject); var dwProcessHandle: DWORD; begin DuplicateHandle(GetCurrentProcess, GetCurrentProcess, GetCurrentProcess, @dwProcessHandle, 0, False, DUPLICATE_SAME_ACCESS); Caption := IntToStr(GetOwnedProcessID(dwProcessHandle)); end; |