Главная страница
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.023 c
1-33685
wl
2003-08-29 12:00
2003.09.11
ищу алгоритм построения


3-33515
cranium
2003-08-19 18:31
2003.09.11
Как корректно обработать не правильный ввод пароля...


3-33516
eds
2003-08-19 17:28
2003.09.11
Как сделать зебру в гриде в Firebird?


1-33538
konst
2003-08-29 12:11
2003.09.11
MDI формы. Как отобразить дочернюю форму, и какие события


1-33611
pirat
2003-08-31 16:57
2003.09.11
как