Как получить указатели всех процессов, запущенных в системе
Как получить указатели всех процессов, запущенных в системе
Как получить указатели всех процессов, запущенных в системе Под windows (win32) это возможно с использованием вспомогательных информационных функций: Вызывается функция: hsnapshot := createtoolhelp32snapshot(th32cs_snapprocess, 0); process32first() - получение информации о первом процессе в списке; Далее в цикле process32next() - получение информации о следующем процессе в списке. unit kernlutl; interface uses tlhelp32, windows, classes, sysutils; procedure getprocesslist(list: tstrings); procedure getmodulelist(list: tstrings); function getprocesshandle(processid: dword): thandle; procedure getparentprocessinfo(var id: dword; var path: string); const process_terminate = $0001; process_create_thread = $0002; process_vm_operation = $0008; process_vm_read = $0010; process_vm_write = $0020; process_dup_handle = $0040; process_create_process = $0080; process_set_quota = $0100; process_set_information = $0200; process_query_information = $0400; process_all_access = standard_rights_required or synchronize or $0fff; implementation procedure getprocesslist(list: tstrings); var i: integer; hsnapshoot: thandle; pe32: tprocessentry32; begin list.clear; hsnapshoot := createtoolhelp32snapshot(th32cs_snapprocess, 0); if (hsnapshoot = -1) then exit; pe32.dwsize := sizeof(tprocessentry32); if (process32first(hsnapshoot, pe32)) then repeat i := list.add(format('%x, %x: %s', [pe32.th32processid, pe32.th32parentprocessid, pe32.szexefile])); list.objects[i] := pointer(pe32.th32processid); until not process32next(hsnapshoot, pe32); closehandle (hsnapshoot); end; procedure getmodulelist(list: tstrings); var i: integer; hsnapshoot: thandle; me32: tmoduleentry32; begin list.clear; hsnapshoot := createtoolhelp32snapshot(th32cs_snapmodule, 0); if (hsnapshoot = -1) then exit; me32.dwsize := sizeof(tmoduleentry32); if (module32first(hsnapshoot, me32)) then repeat i := list.add(me32.szmodule); list.objects[i] := pointer(me32.th32moduleid); until not module32next(hsnapshoot, me32); closehandle (hsnapshoot); end; procedure getparentprocessinfo(var id: dword; var path: string); var processid: dword; hsnapshoot: thandle; pe32: tprocessentry32; begin processid := getcurrentprocessid; id := 0; path := ''; hsnapshoot := createtoolhelp32snapshot(th32cs_snapprocess, 0); if (hsnapshoot = -1) then exit; pe32.dwsize := sizeof(tprocessentry32); if (process32first(hsnapshoot, pe32)) then repeat if pe32.th32processid = processid then begin id := pe32.th32parentprocessid; break; end; until not process32next(hsnapshoot, pe32); if id <> -1 then if (process32first(hsnapshoot, pe32)) then repeat if pe32.th32processid = id then begin path := pe32.szexefile; break; end; until not process32next(hsnapshoot, pe32); closehandle (hsnapshoot); end; function getprocesshandle(processid: dword): thandle; begin result := openprocess(process_all_access, true, processid); end; end.