AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Ermitteln ob ein Programm oder Prozess ein Dienst ist
Thema durchsuchen
Ansicht
Themen-Optionen

Ermitteln ob ein Programm oder Prozess ein Dienst ist

Ein Thema von Codewalker · begonnen am 22. Mai 2006 · letzter Beitrag vom 16. Aug 2006
Antwort Antwort
Seite 2 von 3     12 3      
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
NicoDE
(Gast)

n/a Beiträge
 
#12

Re: Ermitteln ob ein Programm oder Prozess ein Dienst ist

  Alt 14. Aug 2006, 18:45
Zitat von Codewalker:
Weiß jemand, wie ich herausfinden kann, ob ein Programm (exe?) oder ein Prozess ein Dienst ist.
Wenn du die nötigen Rechte hast und das Betriebssystem mindestens Windows 2000 ist, dann mit MSDN-Library durchsuchenEnumServicesStatusEx (in den Strukturen steht u.a. die ID des jeweiligen Prozesses).
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#13

Re: Ermitteln ob ein Programm oder Prozess ein Dienst ist

  Alt 14. Aug 2006, 19:17
Das kommt davon, wenn man (== "ich") zu faul ist ins PSDK zu gucken
  Mit Zitat antworten Zitat
Benutzerbild von Codewalker
Codewalker

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

Re: Ermitteln ob ein Programm oder Prozess ein Dienst ist

  Alt 15. Aug 2006, 07:40
Zitat:
Das kommt davon, wenn man (== "ich") zu faul ist ins PSDK zu gucken
Ich hab mir die Funktionen in der MSDN mal in Ruhe angesehen kann auch nur sagen: - Ich werd das mal umsetzen damit ich weiterhin so eine "Durch-die-Brust-ins-Auge"-Funktion nutzen muss, wenn das auch eleganter und besser geht.
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#15

Re: Ermitteln ob ein Programm oder Prozess ein Dienst ist

  Alt 15. Aug 2006, 10:48
Kleiner Tipp am Rande: Nimm gleich die Unicode-Variante (ich hab hier einen japanischen Systemdienst der von den meisten ANSI-Programmen nicht angesprochen werden kann).
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#16

Re: Ermitteln ob ein Programm oder Prozess ein Dienst ist

  Alt 16. Aug 2006, 01:35
Zitat von NicoDE:
Kleiner Tipp am Rande: Nimm gleich die Unicode-Variante (ich hab hier einen japanischen Systemdienst der von den meisten ANSI-Programmen nicht angesprochen werden kann).
Dieses Problem hätten Sie sich mit einem C/C++ Compiler und #define _UNICODE erspart
  Mit Zitat antworten Zitat
Benutzerbild von Harry M.
Harry M.

Registriert seit: 29. Okt 2004
Ort: Halle
462 Beiträge
 
#17

Re: Ermitteln ob ein Programm oder Prozess ein Dienst ist

  Alt 16. Aug 2006, 01:46
Ich habe jetzte nicht den ganzen Thread gelesen....
Aber möglich wäre zu Testen ob der Pfand des Programmes wo Du wissen möchstes ob es ein Dienst ist oder nicht in der Registry findest bei den Servicen.
Harry
Gruß Harry
www.H-Soft.info
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#18

Re: Ermitteln ob ein Programm oder Prozess ein Dienst ist

  Alt 16. Aug 2006, 01:52
Zitat von Harry M.:
Ich habe jetzte nicht den ganzen Thread gelesen....
Aber möglich wäre zu Testen ob der Pfand des Programmes wo Du wissen möchstes ob es ein Dienst ist oder nicht in der Registry findest bei den Servicen.
Vergleiche mal folgende Pfade sinnvoll:

%SystemRoot%\System32\\drivers\etc\\..\..\kernel32 .dll

C:\Windows\System32\kernel32.dll

Diverse Funktionen ala GetFullPathName() könnten helfen, aber manches wird IMO nicht aufgelöst.

Dann hätten wir noch \SystemRoot\System32\kernel32.dll ... das ist der Object Manager Namespace ... was nu?

Und das ist ja nur die Spitze des Eisbergs, siehe oben. Registry ist nicht die korrekte Methode. Der Einzige, der weiß welcher Prozeß ein Service ist, ist der SCM.
  Mit Zitat antworten Zitat
Benutzerbild von Harry M.
Harry M.

Registriert seit: 29. Okt 2004
Ort: Halle
462 Beiträge
 
#19

Re: Ermitteln ob ein Programm oder Prozess ein Dienst ist

  Alt 16. Aug 2006, 01:58
Ja klar ServiceMgr auch wenn ich Registry geschrieben habe. Nur der mach auch nix weiter als dort nach den Infos zu suchen.
Harry
Gruß Harry
www.H-Soft.info
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#20

Re: Ermitteln ob ein Programm oder Prozess ein Dienst ist

  Alt 16. Aug 2006, 10:42
Zitat von Harry M.:
Ich habe jetzte nicht den ganzen Thread gelesen...
Das solltest Du aber
Zitat von Harry M.:
Aber möglich wäre zu Testen ob der Pfand des Programmes wo Du wissen möchstes ob es ein Dienst ist oder nicht in der Registry findest bei den Servicen.
Obwohl Äpfel und Birnen Obst sind, kann man beides nicht vergleichen. Es gibt einige Module, die in einem Image Dienst(e) und Anwendung vereinen.

ps: ganz davon abgesehen, dass Microsoft die Art der Speicherung jederzeit ändern könnte (unter Vista wurde bereits viel geändert - mit hart-codierten Pfaden kommt man da nicht weit)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:55 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