Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Dienste und PID? (https://www.delphipraxis.net/186073-dienste-und-pid.html)

Mattze 31. Jul 2015 15:42

Dienste und PID?
 
Hallo,

ich lasse mir die Dienste mit EnumServicesStatusEx auflisten.
Dabei habe ich festgestellt, dass einige Dienste den Status "wird ausgeführt" haben, aber keine PID zu ermitteln ist.
Weder die, die mit EnumServicesStatusEx kommt, noch mit Queryservicestatusex. Als PID wird 0 zurückgeliefert (z. B. beim Dienst ACPI).

Wie ist sowas überhaupt möglich?

Wie kriege ich raus, ob ein Dienst 32Bit oder 64Bit ist?

Mit IsWow64Process kriegt man das nur über die PID.
Wenn nun aus welchen Gründen auch immer keine PID existiert, wie mach ich das dann?
(Siehe oben oder Dienste mit dem Status "beendet".)

Gruß
Mattze

Luckie 31. Jul 2015 19:33

AW: Dienste und PID?
 
Kann es sein, dass dir die Rechte fehlen? Einen Prozess ohne PID kann es nicht geben.

Mattze 1. Aug 2015 06:04

AW: Dienste und PID?
 
Hallo Michael,

eben! Der Meinung bin ich eigentlich auch.
SeDebugPrivilege habe ich mir natürlich gleich zu Anfang des Programmes gegeben.
Wenn die nicht irgendwo wieder kassiert werden, habe ich also eigentlich die entsprechenden Rechte.
(Zumindestens funktioniert für Prozesse mit alles - in TProcessEntry32 über CreateToolhelp32Snapshot, Processfirst, Processnext...).
Bei Diensten kriege ich fastnimmer die PID 0 (in einem array von TEnumServiceStatusEx(-es) über EnumServicesStatusEx.)
Bei Diensten, deren Status "beendet" oder "deaktiviert" ist, würde ich das ja noch verstehen - obwohl ich von denen natürlich auch gerne die Bit-Breite wüsste. (Wie?)
Aber, da sind auch Dienste wie ACPI, AFD...

Ob das schon damit zusammenhängt, dass das ein 32Bit-Programm in einer 64-Bit-Umgebung ist?

Also, ich weiß da nicht weiter...
(Ich habe es z. Bsp. auch mal über die Prozessliste versucht (siehe oben). Aber da tauchen die Dienste (auch wenn sie eine PID haben) nicht auf.)
Ich finde von 490 Diensten gerade 7 64er und 3 32er.
(Allerdings sind über die Hälfte "beendet". Trotzdem,der Rest "wird ausgeführt", es wird aber trotzdem keine PID ermittelt.)

Gruß
Mattze

Luckie 1. Aug 2015 10:16

AW: Dienste und PID?
 
Zitat:

Ob das schon damit zusammenhängt, dass das ein 32Bit-Programm in einer 64-Bit-Umgebung ist?
Das wird es sein, denke ich mal. aber ich glaube, es gibt einen Möglichkeit. Nur bin ich, was 64-Bit angeht nicht ganz Firm.

Mattze 1. Aug 2015 10:46

AW: Dienste und PID?
 
Hallo,

na-ja, ganz sicher bin ich mir da nicht.
Ich habe das für Prozesse gemacht und kriege auch mit meinem 32Bit-Programm (Delphi 7 pro) unter Win 7 pro 64 alle möglichen Daten für 32Bit- und 64Bit-Prozesse, die PID eingesschlossen.
(Siehe meine Anfrage zu VirtualQueryEx, gleich hier.)

Mich wundert auch, dass die Dienste nicht in der Prozessliste erscheinen (bis auf ganz wenige Ausnahmen).
Für mich ist der Prozess der übergeordnete Begriff und umfasst alles, was zurzeit auf dem Computer läuft. (Also auch Programme und Dienste. Zumindestens für Programme gilt das auch - siehe Taskmanager.)

Na ja, und die Frage bleibt: Wie kriege ich die Breite (32 oder 64) für einen Dienst, für den ich keine PID habe, der aber in der Serviceliste - mit EnumServicesStatusEx - aufgezählt wird?
Das müsste dem System ja dann durchaus bekannt sein!

Gruß
Mattze

Namenloser 1. Aug 2015 11:10

AW: Dienste und PID?
 
Das ist ziemlich sicher ein Rechte-Problem. Dienste laufen nicht unter deinem Benutzer sondern unter dem privilegierten SYSTEM-User. Deswegen hat dein Programm als normaler User-Prozess keinen Zugriff darauf. Starte dein Programm mal als Administrator, dann könnte es gehen.

Der Task-Manager zeigt die Prozesse von anderen Benutzern ja auch erst an, wenn du ihn im Administrator-Modus startest.

Luckie 1. Aug 2015 11:17

AW: Dienste und PID?
 
Aber teilweise bekommt er ja die PID, wenn ich ihn richtig verstanden habe.

Mattze 1. Aug 2015 12:21

AW: Dienste und PID?
 
Hallo Namenloser,

1. Ich bin Administrator.
2. Das Programm wird (sowieso) immer als Administrator ausgeführt. (Es zeigt noch eine riesige Menge Infos vom System mehr an. Alles was ich so in den letzten Jahren irgendwo im Netz oder meinem Kopp gefunden habe. Reine Spielerei und Bastelei! Da ist es durchaus wahrscheinlich, dass für das Eine oder Andere Admin-Rechte gebraucht werden.)
3. Siehe Luckie. Für EvtEng kriege ich eine PID und, da es auch in der Prozessliste ist, eine Breite von 64Bit.
Für VMNetDHCP das gleiche, nur 32Bit.
Ein paar, ganz wenige, gibt es schon, bei denen es klappt!
Und, wenigstens die genannten dürften System-Prozesse sein. Also,soooo einfach scheint es leider nicht zu sein.

Gruß
Mattze

Namenloser 1. Aug 2015 12:33

AW: Dienste und PID?
 
Ich tippe trotzdem auf ein Rechteproblem. Vielleicht haben die Dienste, bei denen es geht, irgendein Flag aktiviert, das die anderen nicht haben, oder umgekehrt (UiAccess oder sonstwas). Hast du auch mal die UAC komplett deaktiviert? Nur um diese Fehlerquelle auszuschließen. Die UAC führt nämlich auch manchmal zu komischem Verhalten, das einen ganz schön in die Irre führen kann.

Auch interessant wäre, was passiert, wenn dein Programm (bzw. die entsprechende Routine) ebenfalls als Dienst läuft.

Mattze 1. Aug 2015 12:42

AW: Dienste und PID?
 
Hallo Namenloser,

auch die UAC usw.ist deaktiviert.
Sicher, ein Flag kann man nie ganz ausschließen.
Das wäre aber komisch, wenn es ausgerechnet ein paar System-Dienste nicht gesetzt hätten!

Es bleibt natürlich trotzdem die Frage, wie ich ohne PID an die Breite eines Dienstes rankomme.

Gruß
Mattze


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:50 Uhr.
Seite 1 von 3  1 23      

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