Einzelnen Beitrag anzeigen

Benutzerbild von Codewalker
Codewalker

Registriert seit: 18. Nov 2005
Ort: Ratingen
945 Beiträge
 
Delphi XE2 Professional
 
#11

Re: Ermitteln ob ein Programm oder Prozess ein Dienst ist

  Alt 14. Aug 2006, 15:04
Zitat von Olli:
Das müßtest du mir nochmal erklären, wenn es geht.
Delphi-Quellcode:
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;
Ich wollte den Pfad zu einem Prozess ermitteln, um diesen z.B. neu starten zu können. In einem Forum (ich meine DP, bin mir aber nicht sicher) habe ich dann den Tipp gefunden, dass man zu die geöffneten Module auslesen kann. Das erste Modul ist dann immer die Prozessdatei selbst, da diese immer als erste geöffnet werden muss, bevor weitere Module geladen werden können. Bei einem Dienst steht in dort jedoch Speichermüll. So hat man ein weiteres Indiz, ob es sich um einen Dienst handelt.

Zitat von Olli:
Ein Thread innerhalb eines Dienstes muß nicht als SYSTEM laufen, auch wenn der Dienst als SYSTEM gestartet wurde. Ergo kann das Token falsch sein, oder schlimmer, du kannst möglicherweise garnicht die Rechte haben um auf Ressourcen zuzugreifen, die du im obigen Code ansprichst.
Zitat von Olli:
Daß einige Prozesse einen Elternprozeß haben ist dir klar? Für Dienste gibt es normalerweise einen einzigen Elternprozeß (services.exe) unter dem dann andere laufen (svchost.exe für DLL-Services usw.).
Wie kann ich denn diesen "Elternprozess" ermitteln? Kannst du das ein wenig ausführlicher beschreiben, da endet mein Wissen
  Mit Zitat antworten Zitat