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

Вниз

Можно ли получить Handle процесса, не зная его PID?   Найти похожие ветки 

 
Vorobyev Sergey   (2003-07-10 10:24) [0]

Привет всем!
Ситуация следующая:
Есть процессА, который запускает процессБ (с помощью CreateProcess).
Необходимо в процессеБ получить Handle процессаА, наподобие OpenProcess, при этом не передавая и не зная идентификатора (PID) процессаА?
Нельзя как-нибудь унаследовав Handle процессаА, получить его в процессеБ (подобно семафорам и мутексам, используя InheritHandles)

Спасибо


 
MBo ©   (2003-07-10 10:27) [1]

проще всего записать ProcessID A, например, в именованный MMF, и считать его из B.
А можно и передать его как параметр командной строки.


 
Игорь Шевченко ©   (2003-07-10 10:48) [2]

В Nt/2000/XP можно через NtQueryInformationProcess (ProcessBasicInformation, ...) в возвращаемой структуре данных есть поле InheritedFromProcessId


 
Vorobyev Sergey   (2003-07-10 10:53) [3]


> MBo © (10.07.03 10:27)
> проще всего записать ProcessID A, например, в именованный
> MMF, и считать его из B.
> А можно и передать его как параметр командной строки.

Согласен, что так можно..
Процесс ID можно передать различными способами..
НО, интересует именно МОЖНО ЛИ ПОЛУЧИТЬ Handle ПРОЦЕССА БЕЗ PID?


> Игорь Шевченко © (10.07.03 10:48)

К сожалению :-((( программа должна работать как под управлением Win9x, так и NT/2000/XP


 
MBo ©   (2003-07-10 10:59) [4]

ToolHelp32 - PROCESSENTRY32.th32ParentProcessID

>МОЖНО ЛИ ПОЛУЧИТЬ Handle ПРОЦЕССА БЕЗ PID
Зачем? Для дуплицирования все равно нужен дескриптор процесса.


 
Набережных С. ©   (2003-07-10 17:41) [5]

procedure TForm1.SpeedButton1Click(Sender: TObject);
var
hPrc: THandle;
si: TStartupInfo;
pi: TProcessInformation;
Params: string;
begin
hPrc:=OpenProcess(MAXIMUM_ALLOWED, true, GetCurrentProcessId);
FillChar(si, Sizeof(si), 0);
si.cb:=Sizeof(si);
Params:="""+ParamStr(0)+"""+" "+IntToStr(hPrc);
if CreateProcess(nil, PChar(Params), nil, nil, true, 0, nil, nil, si, pi)then
begin
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
end;
CloseHandle(hPrc);
end;

procedure TForm1.FormShow(Sender: TObject);
var
hPrc: THandle;
begin
Edit1.Text:=IntToStr(GetCurrentProcessId);
if ParamCount = 1 then
begin
hPrc:=StrToInt(ParamStr(1));
TerminateProcess(hPrc, 0);
( hPrc)
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
hPrc: THandle;
si: TStartupInfo;
pi: TProcessInformation;
Params: string;
begin
hPrc:=OpenProcess(MAXIMUM_ALLOWED, true, GetCurrentProcessId);
FillChar(si, Sizeof(si), 0);
si.cb:=Sizeof(si);
Params:="""+ParamStr(0)+"""+" "+IntToStr(hPrc);
if CreateProcess(nil, PChar(Params), nil, nil, true, 0, nil, nil, si, pi)then
begin
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
end;
CloseHandle(hPrc);
end;

procedure TForm1.FormShow(Sender: TObject);
var
hPrc: THandle;
begin
Edit1.Text:=IntToStr(GetCurrentProcessId);
if ParamCount = 1 then
begin
hPrc:=StrToInt(ParamStr(1));
TerminateProcess(hPrc, 0);
CloseHandle(hPrc);
end;
end;



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

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

Наверх




Память: 0.48 MB
Время: 0.019 c
3-33500
Ник
2003-08-20 10:47
2003.09.11
DBASE


3-33522
MakNik
2003-08-19 15:58
2003.09.11
uniqueidentifier


6-33699
ALaKO
2003-07-07 10:48
2003.09.11
Tembededwb


1-33544
Banderlog
2003-08-29 11:38
2003.09.11
Проверка файла на открытость


1-33570
isff
2003-09-01 15:23
2003.09.11
dll, изменение в главной форме.