Головна сторінка
Top.Mail.Ru Яндекс.Метрика
Форум: "WinAPI";
Поточний архів: 2002.12.23;
Завантажити: [xml.tar.bz2];

Вниз

Як по ID процесу визначити FileName Знайти схожі гілки


dokkk   (2002-11-09 23:07) [0]

Як по ID процесу визначити FileName того файлу, який цей процес запустив? (GetModuleFileName видає якусь хрень, напевно неправильно отримую маніпулятор модуля)



Ученик   (2002-11-10 00:35) [1]

Варіант від paul_shmakov ©, портований в Delphi

function AdjustDebugPriviliges: Bool;
було
hTok: THandle;
tp: TTokenPrivileges;
починати
Result: = False;
if OpenProcessToken (GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, hTok) then try
if LookupPrivilegeValue (nil, "SeDebugPrivilege", tp.Privileges [0] .Luid) then begin
tp.PrivilegeCount: = 1;
tp.Privileges [0] .Attributes: = SE_PRIVILEGE_ENABLED;
Result: = AdjustTokenPrivileges (hTok, False, tp, 0, PTokenPrivileges (nil) ^, PDWord (nil) ^)
кінець
в кінці кінців
CloseHandle (hTok)
кінець
end;

function GetProcessCommandLine (dwProcessID: DWord; szBuffer: PChar; cbBuffer: DWORD): Bool;
було
hProcess, hThread: THandle;
pGetCommandLine: Pointer;
pCommandLine: PChar;
dwRead, dwTID: DWord;
починати
Result: = FALSE;
hProcess: = OpenProcess (PROCESS_CREATE_THREAD or PROCESS_VM_READ or PROCESS_VM_OPERATION,
FALSE, dwProcessID);
if (hProcess <> 0) then try
pGetCommandLine: = GetProcAddress (GetModuleHandle ( "kernel32.dll"), "GetCommandLineA");
if (pGetCommandLine <> nil) then begin
hThread: = CreateRemoteThread (hProcess, NIL, 0, pGetCommandLine, nil, 0, dwTID);
if (hThread <> 0) then try
if WAIT_OBJECT_0 = WaitForSingleObject (hThread, 10000) then begin
if GetExitCodeThread (hThread, PDWord (@pCommandLine) ^) then begin
if ReadProcessMemory (hProcess, pCommandLine, szBuffer, cbBuffer, dwRead) then begin
szBuffer [dwRead]: = #0;
Result: = TRUE
кінець
кінець
кінець
в кінці кінців
CloseHandle (hThread)
кінець
кінець
в кінці кінців
CloseHandle (hProcess)
кінець
end;


procedure TForm1.Button1Click (Sender: TObject);
було
szBuffer : array[0..MAX_PATH] of Char;
починати
AdjustDebugPriviliges;
if GetProcessCommandLine(StrToInt(Edit1.Text), szBuffer, MAX_PATH) then
ShowMessage (szBuffer)
end;




Ученик   (2002-11-10 00:38) [2]

ще варіант

function NTProcessExeName(hProcess : THandle) : string;
було
i: Integer;
cRequest, cModules : DWord;
hModules : array of DWORD;
szExeName : array[0..255] of Char;
починати
Result: = "";
cRequest: = 96; cModules: = 0;
повторювати
SetLength (hModules, cRequest div 4);
if not EnumProcessModules(hProcess, PDWord(Pointer(@hModules)^), cRequest, cModules) then
Break;
if cModules <cRequest then Break else cRequest: = cRequest shl 1;
until False;
cModules: = cModules div 4;
for i := 0 to cModules - 1 do begin
if GetModuleFileNameEx(hProcess, hModules[i], szExeName, 255) > 0 then begin
Result := StrPas(szExeName);
if CompareText(ExtractFileExt(Result), ".EXE") = 0 then Exit
кінець
кінець
end;


function ProcessExeName(ProcessID : THandle) : string;
було
hProcess,
hSnapshot: THandle;
ModuleEntry: TModuleEntry32;
починати
Result: = "";
if IsWindowsNT then begin
hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or
PROCESS_VM_READ, False, ProcessID);
if hProcess <> 0 then try
Result := NTProcessExeName(hProcess)
в кінці кінців
CloseHandle (hProcess)
кінець
end else begin
hSnapshot: = CreateToolhelp32Snapshot (TH32CS_SNAPALL, ProcessID);
if hSnapshot > 0 then try
ModuleEntry.dwSize: = SizeOf (ModuleEntry);
if Module32First(hSnapshot, ModuleEntry) then repeat
Result := StrPas(ModuleEntry.szExePath);
if CompareText(ExtractFileExt(Result), ".EXE") = 0 then
вихід
until not Module32Next (hSnapshot, ModuleEntry);
Result: = ""
в кінці кінців
CloseHandle(hSnapshot)
кінець
кінець
end;



Ученик   (2002-11-10 00:39) [3]

> Учень © (10.11.02 00: 38)
використовує
Psapi, TlHelp32;



dokkk   (2002-11-10 19:09) [4]

Ок.
Сие верно и полезно



Vitiy   (2002-11-10 21:32) [5]

Навздогін ...

А как по ID процесса определить :: сколько он кушает процессорных ресурсов (в процентах%) ?



сторінки: 1 вся гілка

Форум: "WinAPI";
Поточний архів: 2002.12.23;
Завантажити: [xml.tar.bz2];

наверх









Пам'ять: 0.57 MB
Час: 0.028 c
3-74617
TVV
2002-12-05 13:02
2002.12.23
Blob поля через IBQuery запит


1-74711
Shc
2002-12-12 19:20
2002.12.23
Збереження об'єктів в RXRichEdit


1-74743
Коля
2002-12-12 18:01
2002.12.23
HTML в Делфі


1-74763
харків'янин
2002-12-10 22:46
2002.12.23
Потрібна допомога по Stringgrid у


3-74619
_toltec
2002-12-05 13:40
2002.12.23
UDF





африкаанс албанський арабська вірменин азербайджанець баскський білоруський болгарська каталонський Китайська (спрощене письмо) Китайський традиційний) хорватський чеська данську мову нідерландський Ukranian естонець Філіппінська фінську мову французький
галісійська грузинський німецький грецький гаїтянський креольський давньоєврейську хінді угорський ісландський індонезієць ірландський італійський японський корейський латиська литовець македонець малайський мальтійський норвежець
перс полірування португальська румунський російська сербський словацький словенський іспанська суахілі шведську мову тайський турецька український урду в'єтнамський валлійський ідиш бенгальський боснійський
кебуано есперанто гуджараті хауса хмонг ігбо яванський каннада кхмерская Лао латинь маорі маратхі монгольський непальська панджабі сомалійський тамільська телугу йоруба
зулуський
Англійська Французький Німецький Італійський Португальська Русский Іспанська