Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Alle Moeglichkeiten Prozesse aufzulisten (https://www.delphipraxis.net/65343-alle-moeglichkeiten-prozesse-aufzulisten.html)

Win32.API 15. Mär 2006 13:47


Alle Moeglichkeiten Prozesse aufzulisten
 
Hi,
mich würde mal Interessieren welche Moeglichkeiten es gibt alle laufenden Prozesses aufzulisten.
Mir wuerde schon der Name der Funktion reichen, also keinen fertigen Source.
Hoffe das klar ist was ich meine :P

greetz

brechi 15. Mär 2006 13:49

Re: Alle Moeglichkeiten Prozesse aufzulisten
 
uses tlhelp32;

Process32First, Process32Next

Luckie 15. Mär 2006 13:52

Re: Alle Moeglichkeiten Prozesse aufzulisten
 
MSDN-Library durchsuchenEnumProcesses.

brechi 15. Mär 2006 14:22

Re: Alle Moeglichkeiten Prozesse aufzulisten
 
Wo bei (EnumProcesses) gesagt werden muss, dass es nicht auf win9x funktioniert.

Win32.API 15. Mär 2006 14:24

Re: Alle Moeglichkeiten Prozesse aufzulisten
 
Danke fuer die Antworten, ich guck mir die Funktionen erstmal an,
wenn jemand noch andere Funktionen kennt bitte posten.

greetz

Luckie 15. Mär 2006 14:26

Re: Alle Moeglichkeiten Prozesse aufzulisten
 
Warum willst du das eigentlich wissen?

@brechi: Nun ja, jetzt wo Vista vor der Tür steht, würde ich nicht mehr umbedingt auf Windows 9x Kompatibilitäöt rücksichtnehmen. ;)

brechi 15. Mär 2006 14:34

Re: Alle Moeglichkeiten Prozesse aufzulisten
 
Kommt drauf an, was du genau wissen willst.

Es gibt noch sowas wie NtQueryProcessInformation

oder einfach direkt mit ausprobieren:

Delphi-Quellcode:
procedure ListProcessIDsNT;
var i: DWord;
    dwProcess: DWord;
    dwPriv: DWord;
begin
  SetDebugPrivilege(SE_PRIVILEGE_ENABLED,dwPriv);
  for i := 0 to High(Word) div 4 do
  begin
    dwProcess := OpenProcess(PROCESS_ALL_ACCESS,false,i*4);
    if (dwProcess <> 0) then
    begin
      CloseHandle(dwProcess);
      Writeln(i*4);
      Writeln(GetExeFileNameAExNT(i*4));
    end;
  end;
  //Writeln(GetExeFileNameAExNt(FindProcess('explorer')));
  SetDebugPrivilege(dwPriv);
  ReadLn;
end;
mit dem richtigen Wissen kommst so auch an die Dateinamen usw. Ich bastel mir gerade selbst was schönes wie z.b.

Delphi-Quellcode:
function GetExeFileNameAExNt(dwProcessID: DWord): String; stdcall;
var
  PEB     : TPEBNT;
  dwProcessID2: DWord;
  LdrData : TLdrData;
  dwRead : DWord;
  ModuleEntry : TModuleEntry;
begin
  Result := '';
  dwProcessID2 := OpenProcess(PROCESS_ALL_ACCESS,False,dwProcessID);
  if (dwProcessID2 <> 0) then
    dwProcessID := dwProcessID2;
  if ReadProcessMemory(dwProcessID,Pointer($7FFDF000),@PEB,SizeOf(TPEBNT),dwRead) and
     (dwRead = SizeOf(TPEBNT)) then
  begin
    if (PEB.pLdrData = nil) then
      ReadProcessMemory(dwProcessID,Pointer(PEB.pEventLogSection),@PEB,SizeOf(TPEBNT),dwRead);
    if (ReadProcessMemory(dwProcessID,PEB.pLdrData,@LdrData,SizeOf(TLdrData),dwRead)) and (dwRead = SizeOf(TLdrData)) then
    begin
      if (ReadProcessMemory(dwProcessID,LdrData.InLoadOrderModuleList,@ModuleEntry,SizeOf(TModuleEntry),dwRead)) and
         (dwRead = SizeOf(TModuleEntry)) then
        Result := ReadPWideChar(dwProcessID,ModuleEntry.ModuleName);
    end;
  end;
  if (dwProcessID2 <> 0) then
    CloseHandle(dwProcessID);
end;
Aber mehr gibts von mir zur Zeit nicht dazu, da gerade alle Funktionen für 9x und NT nachbaue ;>

für die, die es unter NT mal testen wollen:
http://uall.overclock.ch/public/GetExeFileNameAEx.exe

Win32.API 15. Mär 2006 14:38

Re: Alle Moeglichkeiten Prozesse aufzulisten
 
Programm A versteckt sich vor Programm B (beides nicht meine Programme) ich moechte Programm A in Programm B sichtbar machen.
Ich habe jetzt folgende funktionen:

NtQuerySystemInformation
Process32Next
Process32NextW
EnumProcesses

die ich auf API-Hooks teste und diese ,wenn vorhanden, entferne.


greetz


Edit: NtQuerySystemInformation wird immer aufgerufen, ich glaube alle anderen Funktion basieren auf dieser Funktion, aber sie ist nicht gehooked also muss eine Funktion auf einer niedrigeren ebene gehookt sein. Die Möglichkeit mit der Schleife muss ich mir nochmal angucken, und eventuell OpenProcess hooken.

brechi 15. Mär 2006 14:50

Re: Alle Moeglichkeiten Prozesse aufzulisten
 
Klar wird die Nt Funktionen von der kernel32.dll aufgerufen.
Es wird sich dabei sehr wahrscheinlich um einen Treiber handeln, dazu gibts tausende Beispiele im Internet. Und den wirst du dann garantiert nicht mit Delphi erkennen.

Warum schreibst du nicht gleich dein Vorhaben rein, ich hasse solche Fragen.
Hätte man dir auch gleich sagen können.

Merk dir mal für die anderen Threads die du erstellst, dass du gleich mal dein Vorhaben dazu postest.

Win32.API 16. Mär 2006 05:54

Re: Alle Moeglichkeiten Prozesse aufzulisten
 
Ich habe mir das mit dem Treiber mal angeguckt, es stimmt. Ich habe in delphi die Processes mit Process32First/Next aufgelistet und da taucht der Process komischer Weise auf, was eigentlich nicht sein dürfte ,oder? ... .


greetz


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz