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 Pfad über Prozess (https://www.delphipraxis.net/60538-pfad-ueber-prozess.html)

Unplugged 8. Jan 2006 19:23


Pfad über Prozess
 
Hallo,

mit CreateToolhelp32Snapshot kann ich mir ja beispielsweise unter XP die Prozessliste holen.

Um jetzt an die Pfade zu kommen, kann man dies bekanntlich über OpenProcess und dann GetModuleFileNameEx.


Aber:
Wenn ich jetzt ein Programm unter einem anderen Benutzeraccount starte, kann ich zwar den Prozess sehen, jedoch nicht den Pfad auslesen.
Gibt es da auch eine andere Möglichkeit ?

Olli 10. Sep 2006 12:23

Re: Pfad über Prozess
 
Das sollte ebenfalls über die Toolhelp API gehen, also ohne Benutzung von GetModuleFileNameEx. Die Toolhelp-API erzeugt dazu Hilfsthreads in den Zielprozessen, so daß es keine Probleme geben sollte. Das entsprechende Flag lautet TH32CS_SNAPMODULE

MuTzE.Y85 10. Sep 2006 18:33

Re: Pfad über Prozess
 
Wie das funktioniert hab ich mich auch schon gefragt! Könnte einer mal nen Codebeispiel posten?

MuTzE.Y85 10. Sep 2006 19:18

Re: Pfad über Prozess
 
So habs!!

Delphi-Quellcode:
function GetProcessPath(Exename: string): String;
var
 hProcSnap, hModSnap: THandle;
 PE32: TProcessEntry32;
 ME32: TModuleEntry32;
begin
 Result := '';
 hProcSnap := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
 if hProcSnap <> INVALID_HANDLE_VALUE then
  begin
   PE32.dwSize := SizeOf(ProcessEntry32);
   if Process32First(hProcSnap, PE32) = true then
    begin
     while Process32Next(hProcSnap, PE32) = true do
      begin
       if Pos(Exename, PE32.szExeFile) <> 0 then
        begin
         hModSnap := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, PE32.th32ProcessID);
         ME32.dwSize := SizeOf(TModuleEntry32);
         Module32First(hModSnap, ME32);
         Result := ME32.szExePath;
         CloseHandle(hModSnap);
        end;
      end;
    end;
   CloseHandle(hProcSnap);
  end;
end;
:mrgreen:

Olli 10. Sep 2006 20:31

Re: Pfad über Prozess
 
Zitat:

Zitat von MuTzE.Y85
So habs!!

Selbermachen macht auch schlau :zwinker:

MuTzE.Y85 10. Sep 2006 21:59

Re: Pfad über Prozess
 
^^ Bin manchmal nen bissel faul! :wink:

MuTzE.Y85 10. Sep 2006 22:07

Re: Pfad über Prozess
 
So hier noch nen bissel sauberer. Funktionieren aber beide.

Delphi-Quellcode:
function GetProcessPath(Exename: string): String;
var
  hProcSnap, hModSnap: THandle;
  PE32: TProcessEntry32;
  ME32: TModuleEntry32;
begin
  Result := '';
  hProcSnap := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
  if hProcSnap <> INVALID_HANDLE_VALUE then
   begin
    PE32.dwSize := SizeOf(ProcessEntry32);
    if Process32First(hProcSnap, PE32) = True then
     begin
      while Process32Next(hProcSnap, PE32) = True do
       begin
        if Pos(Exename, PE32.szExeFile) <> 0 then
         begin
          hModSnap := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, PE32.th32ProcessID);
          if hModSnap <> INVALID_HANDLE_VALUE then
           begin
            ME32.dwSize := SizeOf(TModuleEntry32);
            if Module32First(hModSnap, ME32) = True then
             Result := ME32.szExePath;
           end;
          CloseHandle(hModSnap);
         end;
       end;
     end;
    CloseHandle(hProcSnap);
   end;
end;

Mackhack 12. Sep 2006 15:59

Re: Pfad über Prozess
 
Damit werden aber nur die Pfade angezeigt von den Threads die durch deinen Benutzer gestartet wurden. Mit etwas mehr Arbeit kannst du dann auch SYSTEM und NETWORK SERVICE anzeigen lassen!

Olli 12. Sep 2006 17:44

Re: Pfad über Prozess
 
Zitat:

Zitat von Mackhack
Damit werden aber nur die Pfade angezeigt von den Threads die durch deinen Benutzer gestartet wurden. Mit etwas mehr Arbeit kannst du dann auch SYSTEM und NETWORK SERVICE anzeigen lassen!

Threads haben keine Pfade, aber worauf willst du hinaus?

Mackhack 13. Sep 2006 02:32

Re: Pfad über Prozess
 
Hi,

sorry den Pfad der File rauszufinden ueber den Thread ist hier doch das Thema richtig? Hab mich leider falsch ausgedrueckt. Jedenfalls kann man damit die Files mit Path nicht ermitteln die nicht unter dem eigenen Benutzernamen gestartet wurden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:51 Uhr.

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