![]() |
Priorität und Pfad von Diensten ermitteln
Hallo zusammen.
Wie kann ich die Priorität und den Pfad eines Dienstes ermitteln. Über GetPriorityClass kann ich das schon von Anwendungen, jedoch liefert OpenProcess als Handle immer 0 wenn es ein Dienst ist.
Delphi-Quellcode:
Im Moment fange ich das einfach als Wert ppService ab. Da jedoch der Taskmanager und auch der TuneUp Process Manager (der ja auch in Delphi programmiert wurde) einen Wert ermitteln können, muss das ja gehen. :gruebel:
function GetProcPriority(PID: DWord): TProcPriority;
var hProcess: THandle; Priority: Cardinal; begin hProcess := OpenProcess(PROCESS_SET_INFORMATION, False, PID); If hProcess = 0 then begin Result:=ppService; Exit; end; Priority := GetPriorityClass(hProcess); case Priority of $00000040: Result := ppIdle; $00004000: Result := ppLow; $00000020: Result := ppNormal; $00008000: Result := ppHigher; $00000080: Result := ppHighest; $00000100: Result := ppRealtime; else Assert(False, 'Unknown Value for priority'); end; CloseHandle(hProcess); end; Das zweite ist, dass ich dann auch noch gerne den Pfad zur EXE/DLL - Datei des Services ermitteln möchte (am besten mit aufgerufenen Parametern). Bei Anwendungen funktioniert dieser Code ganz gut:
Delphi-Quellcode:
Bei Diensten erhalte ich aber nur Speichermüll, so dass ich das ganze mit FileExists abfangen muss. Wie kann ich das von Diensten ermitteln (Der TuneUp ProcessManager ermittelt sogar noch eine Beschreibung. Wie auch immer... :wink: ). Bin für jeden Tipp dankbar ...
function GetExecutableFromPID(dwProcessID: DWord): String;
var FSnapshotHandle: THandle; FModuleEntry32: TModuleEntry32; begin Result := ''; begin FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwProcessID); FModuleEntry32.dwSize := Sizeof(FModuleEntry32); Module32First(FSnapshotHandle, FModuleEntry32); if FileExists(FModuleEntry32.szExePath) = True then Result := FModuleEntry32.szExePath else Result := ''; CloseHandle(FSnapshotHandle); end; end; |
Re: Priorität und Pfad von Diensten ermitteln
Zitat:
|
Re: Priorität und Pfad von Diensten ermitteln
hmm. Die Dienste haben alle als Benutzer das Systemkonto. Gibt es denn eine Möglichkeit, den Wert trotzdem zu ermitteln?
|
Re: Priorität und Pfad von Diensten ermitteln
Zitat:
Zitat:
Zur Toolhelp-API äußere ich mich lieber nicht, weil die auf EPROCESS und damit auf einem 16-Byte langen ANSI-Namen basiert. Komplett hirnrissig, aber so ist's nunmal. Daher kann man den Pfad den man damit ermitteln kann auch genausogut in die Tonne kloppen ... angenommen ich nehme folgenden Namen auf einem deutschen System: "Тест.exe" - so wirst du "leider" keinen Erfolg haben diesen sinnvoll anzuzeigen, weil du natürlich nicht wissen kannst, welche Codepage du nehmen sollst um die ANSI-Zeichen in eine sinnvolle Darstellung zu bringen. Es könnte ja auch was Griechisches, Hebräisches oder Chinesisches sein ... oder so ... Nachtrag: Kommando zurück. Die Modul-APIs sollten unter bestimmten Umständen funzen. Die Prozeß-APIs haben die besagten Probleme. |
Re: Priorität und Pfad von Diensten ermitteln
Zitat:
Zitat:
|
Re: Priorität und Pfad von Diensten ermitteln
Zitat:
|
Re: Priorität und Pfad von Diensten ermitteln
Zitat:
'SeDebugPrivilege' 'SeSecurityPrivilege' |
Re: Priorität und Pfad von Diensten ermitteln
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:22 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