Головна сторінка
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.56 MB
Час: 0.028 c
14-74895
Дмитро К.К.
2002-12-04 14:03
2002.12.23
Текстовий редактор


14-74989
Zergling
2002-12-04 06:24
2002.12.23
Юрій Зотов! Чи можна зв'язатися з Вами поштою?


3-74614
Ігорка
2002-12-04 17:45
2002.12.23
ADOQuery і кілька параметрів з однаковими іменами


6-74878
naHkep
2002-10-27 20:44
2002.12.23
GET запит


1-74644
Філат
2002-12-12 13:40
2002.12.23
RadioGroup?





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