Текущий архив: 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.46 MB
Время: 0.009 c