![]() |
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 ? |
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
|
Re: Pfad über Prozess
Wie das funktioniert hab ich mich auch schon gefragt! Könnte einer mal nen Codebeispiel posten?
|
Re: Pfad über Prozess
So habs!!
Delphi-Quellcode:
:mrgreen:
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; |
Re: Pfad über Prozess
Zitat:
|
Re: Pfad über Prozess
^^ Bin manchmal nen bissel faul! :wink:
|
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; |
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!
|
Re: Pfad über Prozess
Zitat:
|
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 11:20 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