Entwickler-Ecke

Windows API - uallprocess ProzessListe erstellen


F34r0fTh3D4rk - So 12.06.05 12:33
Titel: uallprocess ProzessListe erstellen
Hallo zusammen, ich bin momentan gerade dabei ein paar hooks zu schreiben und bin es eigentlich leid, immer wieder ne neue anwendung zu schreiben um ne neue dll in irgendeinen neuen prozess zu laden, also wollte ich mir ein tool basteln, um dlls in prozesse zu injizieren, natürlich mit den wunderschönen units von uall (respekt).

jetzt bin ich an das problem gestoßen eine Prozessliste zu erstellen, mit den units von uall scheint das eigentlich nicht schwierig zu sein, jedoch bekomme ich nur ein paar prozesse, und ich würde auch gerne stehen haben, um was für einen Prozess es sich handelt (System, Besitzer, Lokaler Dienst, etc);

hier mal meine Procedure (vielleicht etwas zu kompliziert :lol:):

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
procedure ListProcesses(Listbox: TListBox);
const
  sep = #13#10;
var
  str, buf: string;
  i, s, e: integer;
  first: boolean;
begin
  first := true;
  e := 0;
  s := 0;
  str := UallProcess.FindallProcesses;
  for i := 1 to length(str) do
    begin
      buf := Copy(str, i, 2);
      if buf = sep then
        begin
          if first = true then
            begin
              s := i + 2;
              first := false;
            end;
          if s <> 0 then
            e := i + 2;
          if e = 0 then
            s := i + 2;
          if (s <> 0and (e <> 0then
            begin
              listbox.items.add(copy(str, s, e - s - 2));
              e := 0;
              s := 0;
            end;
        end;
    end;
  listbox.Items.delete(0);
end;

eigentlich könnte ich das auch so machen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure GetProcessList(const aProcessList: TStrings);
var
  Snap: THandle;
  ProcessE: TProcessEntry32;
begin
  aProcessList.Clear;
  Snap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  try
    ProcessE.dwSize := SizeOf(ProcessE);
    if Process32First(Snap, ProcessE) then
      Repeat
        aProcessList.Add(ProcessE.szExeFile);
      until not Process32Next(Snap, ProcessE)
    else
      RaiseLastOSError;
  finally
    CloseHandle(Snap);
  end;
end;

was ist eigentlich dieser [systemprocess] ???


retnyg - So 12.06.05 12:52

der systemprozess ist der idle prozess, den du im taskmanager siehst.


F34r0fTh3D4rk - So 12.06.05 13:06

dank den units von uall ist das programm ja sehr schnell fertig geworden (paar minuten :lol:)


retnyg - So 12.06.05 13:11

jo, die uallcollection is ne unit ganz nach meinem geschmack - systemnah, schnörkellos, schnell und ohne komponenten-registrierung zu verwenden...


F34r0fTh3D4rk - So 12.06.05 13:16

und weils so schön ist, pack ich mein programm jetzt in die opensource sparte :wink:


retnyg - So 12.06.05 13:21

mach dich bitte nicht lächerlich ^^
wenn dein programm nur die prozesse auflistet mit einem aufruf einer fremden routine, wird dir das keine lorbeeren einbringen :roll:


F34r0fTh3D4rk - So 12.06.05 13:25

nee ja net nur 8)