Как определить откуда был запущен процесс?
Материал из DRKB
Как определить откуда был запущен процесс?[править | править код]
Есть handle запущенного PE файла. Как определить откуда он был запущен?
Я так предполагаю что getmodulefilename как и GetModuleHandle работает в рамках только своего процесса.
А решить твою задачу .. можно так:
Тут парочка моих любимых функций
uses
tlhelp32;
type
TModuleArray = array of TModuleEntry32;
// Возвращает список описаний (TModuleEntry32) модулей по идентификатору процесса
function GetModulesListByProcessId(ProcessId: Cardinal): TModuleArray;
implementation
function GetModulesListByProcessId(ProcessId: Cardinal): TModuleArray;
var
hSnapshot: THandle;
lpme: TModuleEntry32;
procedure AddModuleToList;
begin
SetLength(Result, High(Result)+2);
Result[High(Result)] := lpme;
end;
begin
SetLength(Result, 0);
hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, ProcessId);
if hSnapshot = -1 then RaiseLastWin32Error;
lpme.dwSize := SizeOf(lpme);
if Module32First(hSnapshot, lpme) then
begin
AddModuleToList;
while Module32Next(hSnapshot, lpme) do AddModuleToList;
end;
end;
var
Wnd: hWnd;
buff: array [0..127] of Char;
Pid: Cardinal;
modarr: TModuleArray;
Name: string;
begin
StringGrid1.RowCount := 1;
Wnd := GetWindow(Handle, gw_HWndFirst);
while Wnd <> 0 do
begin
if (GetWindowText(Wnd, buff, SizeOf(buff)) <> 0) then
begin
FillChar(buff, SizeOf(buff), #0);
GetWindowText(wnd, buff, SizeOf(buff));
// if GetModuleFileName(GetWindowLong(wnd, GWL_HINSTANCE), Name, SizeOf(Name)) = 0 then
// Name := 'Null';
GetWindowThreadProcessId(Wnd, @Pid);
modarr := GetModulesListByProcessId(Pid);
Name := 'Null';
for i:=0 to High(modarr) do
begin
if Integer(modarr[i].modBaseAddr) = $400000 then
begin
Name := modarr[i].szExePath;
break;
end;
end;
StringGrid1.Cells[0,StringGrid1.RowCount-1] := StrPas(buff);
StringGrid1.Cells[1,StringGrid1.RowCount-1] := Name;
StringGrid1.RowCount := StringGrid1.RowCount+1;
end;
Wnd := GetWindow(Wnd, gw_hWndNext);
end;
StringGrid1.RowCount := StringGrid1.RowCount-1;
end;
Author: TAPAKAH
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 02051