![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
По процессу определить путь к файлу [D7, WinXP]
Alex81 © (2006-08-18 18:02:00)Подскажите как по запущенному процессу получить путь к файлу создавшему его ????
n0name (2006-08-22 11:01:00) [1]
function NtQueryInformationProcess(hProcess: THandle; ProcessInfoClass: Integer; ProcessInfoBuffer: Pointer;
ProcessInfoBufferLength: Cardinal; BytesReturned: PCardinal): integer; stdcall; external 'ntdll.dll';
function GetEXEName(pID: DWORD): PWChar;
label err;
var
pbi: array [0..5] of DWORD;
hProc: THandle;
pProcParams: DWORD;
wCmdLen: WORD;
pCmdLine: DWORD;
br: DWORD;
begin
result := nil;
hProc := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, false, pID);
if NtQueryInformationProcess(hProc, 0, @pbi, $18, nil) <> 0 then goto err;
if not ReadProcessMemory(hProc, Pointer(pbi[1] + $10), @pProcParams, 4, br) then goto err;
if not ReadProcessMemory(hProc, Pointer(pProcParams + $38), @wCmdLen, 2, br) then goto err;
if not ReadProcessMemory(hProc, Pointer(pProcParams + $3C), @pCmdLine, 4, br) then goto err;
result := GetMemory(wCmdLen);
if result = nil then goto err;
if not ReadProcessMemory(hProc, Pointer(pCmdLine), result, wCmdLen, br) then
begin
FreeMemory(result);
result := nil;
end;
err:
CloseHandle(hProc);
end;
Alex81 (2006-08-19 13:47:00) [2]Большое спасибо Handle ©. :-)))
Handle (2006-08-19 10:26:00) [3]
uses
TLHelp32, PsAPI;
procedure TForm1.Button1Click(Sender: TObject);
var
bContinue: BOOL;
aSnapshotHandle: THandle;
aProcessEntry32: TProcessEntry32;
PrHandle: THandle;
ExePath: array[0..MAX_PATH] of Char;
begin
aSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
aProcessEntry32.dwSize := SizeOf(aProcessEntry32);
bContinue := Process32First(aSnapshotHandle, aProcessEntry32);
while Integer(bContinue) <> 0 do
begin
if aProcessEntry32.szExeFile = 'notepad.exe' then
begin
PrHandle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, aProcessEntry32.th32ProcessID);
GetModuleFileNameEx(PrHandle, 0, ExePath, SizeOf(ExePath));
Caption := ExePath;
end;
bContinue := Process32Next(aSnapshotHandle, aProcessEntry32);
end;
CloseHandle(aSnapshotHandle);
end;
Alex81 (2006-08-19 10:25:00) [4]Спасибо за ответ, еще бы сказали в каком модуле это функция лежит и в какой DLL. Лучше если б еще маленький примерчик, заранее благодарен.
begin...end (2006-08-18 21:49:00) [5]GetModuleFileNameEx
Чапаев (2006-08-18 21:46:00) [6]Эх и формулировочки у тебя... %-)
Смотри модуль PSAPI, функцию EnumProcessModules().
Alex81 (2006-08-18 19:20:00) [7]
> Что есть "запущенный процесс"?
Запускаем программу. Она появляется в процессах. Как по этому процессу определить путь.
Чапаев (2006-08-18 18:44:00) [8]Что есть "запущенный процесс"?