Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.02.07;
Скачать: CL | DM;

Вниз

определение родильского PID   Найти похожие ветки 

 
Fildy   (2008-12-07 15:03) [0]

нужно определить id процесса-родителя, который запустил мое приложение. делается это,чтобы ограничить количество приложений,которые могут запускать мою программу


 
KilkennyCat ©   (2008-12-07 15:50) [1]

а я всегда считал, что виндоуз запускает...


 
Fildy   (2008-12-07 16:49) [2]


> а я всегда считал, что виндоуз запускает...

т.е. в структуре PROCESSENTRY32 такое поле как parentID это просто так?;)
подскажите,как правильно заполнить эту структуру, чтобы в этом поле отображался родительский pid.


 
Rouse_ ©   (2008-12-07 17:43) [3]

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;


 
Riply ©   (2008-12-07 18:37) [4]

> [3] Rouse_ ©   (07.12.08 17:43)
> Пример выполнения:

А можно разжевать "Пример выполнения" ?
А то у меня складывается впечатление,
что кто-то из нас (либо я, либо ты) перетрудился и нуждается в отдыхе :)


 
Сергей М. ©   (2008-12-07 18:41) [5]


> parentID это просто так?


А зачем оно тебе нужно ?
Процесс, который породил твой процесс, на момент получения тобой его PID вполне мог уже благополучно завершиться.


 
Rouse_ ©   (2008-12-07 19:41) [6]


> А можно разжевать "Пример выполнения" ?
> А то у меня складывается впечатление,
> что кто-то из нас (либо я, либо ты) перетрудился и нуждается
> в отдыхе :)

На псевдохендл иногда не срабатывает, поэтому вместо него получаю реальный описатель...


 
Riply ©   (2008-12-07 19:55) [7]

> [6] Rouse_ ©   (07.12.08 19:41)
> На псевдохендл иногда не срабатывает, поэтому вместо него получаю реальный описатель...

А что говорит, когда не срабатывает ?


 
Rouse_ ©   (2008-12-07 20:47) [8]

Саш, ну мы же это уже на исходниках уже обсуждали год назад :)
NtQueryInformationProcess периодически выдает "неверный дескриптор" на псевдохендл :)


 
Riply ©   (2008-12-07 21:01) [9]

> [8] Rouse_ ©   (07.12.08 20:47)
> Саш, ну мы же это уже на исходниках уже обсуждали год назад :)

Значит я не ошиблась в предположении, что кто-то перетрудился.
Побежала отдыхать :)



Страницы: 1 вся ветка

Текущий архив: 2010.02.07;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.009 c
1-1236756836
EgorovAlex
2009-03-11 10:33
2010.02.07
Странное поведение Delphi 2009


15-1259774632
Наиль
2009-12-02 20:23
2010.02.07
Опять про Марка Руссиновича


15-1259732695
ZeroDivide
2009-12-02 08:44
2010.02.07
Портятся ли блоки питания без нагрузки?


4-1228894242
Хмм
2008-12-10 10:30
2010.02.07
Кликер


15-1259839785
Тимоха123
2009-12-03 14:29
2010.02.07
перечисление форм проекта