Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi PID eines 64Bit-Services unter 32Bit-Programm? (https://www.delphipraxis.net/190928-pid-eines-64bit-services-unter-32bit-programm.html)

Mattze 21. Nov 2016 16:51

PID eines 64Bit-Services unter 32Bit-Programm?
 
Hallo,

eine "kleine" Frage:
Ich arbeite mit Delphi7 pro unter Win10 pro 64.
Für manche (wenige) Services kriege ich die PID ohne Probleme
(mittels EnumServicesStatusEx)
Bei vielen Services kriege ich aber keine PID.
Ich nehme an, dass das 64Bit-Dienste sind.
Wie bekomme ich da aus einem 32Bit-Programm die PID? Geht das überhaupt?

Gruß
Mattze

Aviator 21. Nov 2016 16:54

AW: PID eines 64Bit-Services unter 32Bit-Programm?
 
Eine Lösung für das Problem habe ich nicht. Aber um das noch genauer eingrenzen zu können, solltest du mal einen Vergleich deiner Liste mit der des TaskManagers oder des ProcessExplorers durchführen. Dort siehst du dann genau ob es nur die 64-bit Prozesse oder auch 32-bit Prozesse sind. Möglicherweise auch die, die durch das System gestartet wurden und du keine Rechte dafür hast.

EDIT: Hast du das Programm mal "Als Administrator" gestartet?

himitsu 21. Nov 2016 17:02

AW: PID eines 64Bit-Services unter 32Bit-Programm?
 
Die ID ist immer DWORD (LongWord), jedenfalls wenn man mal ins MSDN guckt.

Ich denke mal dir fehlen einfach die nötigen Rechte, zum Auslesen dieser Information.
Der Taskmanager zeigt sowas auch nicht an, wenn ihm die Rechte fehlen. (z.B. Administrator)

Mattze 21. Nov 2016 17:37

AW: PID eines 64Bit-Services unter 32Bit-Programm?
 
Hallo,

also, die Rechte müsste ich haben. Ich bin Administrator und habe auch "als Administrator starten" gemacht.
Braucht man sonst bestimmte Rechte (Debug_Privilege o. ä.)?
Außerdem würde ich dann überhaupt keine PID bekommen. Bekomme ich aber, nur eben nicht alle.
Also Service-Status: "wird ausgeführt", PID wird mit -1.
Wie gesagt, für manches sind sie richtig, die gleichen, wie im Taskmanager.

Allerdings kriege ich noch viel mehr Services und daran liegt es - wie ich gerade sehe.

Ich liste alle Dienste auf, also auch die, die als Typ "Gerätetreiber" oder "Dateitreiber" haben. Und genau die haben offenbar keine PID!

Also, alle Klarheiten beseitigt, oder?

Gruß und Danke
Mattze

Delphi-Laie 21. Nov 2016 18:02

AW: PID eines 64Bit-Services unter 32Bit-Programm?
 
Zitat:

Zitat von Mattze (Beitrag 1354320)
Für manche (wenige) Services kriege ich die PID ohne Probleme
(mittels EnumServicesStatusEx)
Bei vielen Services kriege ich aber keine PID.
Ich nehme an, dass das 64Bit-Dienste sind.
Wie bekomme ich da aus einem 32Bit-Programm die PID? Geht das überhaupt?

Die PID ist eine Prozeß -ID. Dienste sind jedoch m.E. nicht mit dieser gleichzusetzen. Auf meinem Windows XP z.B. ist fünfmal die svchost.exe gestartet worden, also gibt es sie unter fünf verschiedenen IDs. Es sind jedoch wesentlich mehr Dienste, die auf diese Datei zurückgehen, gestartet worden.

himitsu 21. Nov 2016 19:06

AW: PID eines 64Bit-Services unter 32Bit-Programm?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ja, man könnte in einem Prozess mehrere Dienste oder den Selben mehrmals starten (wenn ich das richtig verstanden hatte und natürlich alle unter unterschiedlichen "Dienst-Namen").
Nie ausprobiert, aber ich hätte vermutet, dass sie dann alle die selbe PID des Prozesses anzeigen.

[edit]
Jupp, die gleiche PID.

UserMode-Treiber und KernelMode-Treiber?
Werden die im KernelMode da auch aufgelistet? [edit2] SERVICE_KERNEL_DRIVER sagt ja.
Die werden ja außerhalb des UserMode-Systems ausgeführt und dort gibt es "diese" PID eventuell nicht.

Zacherl 21. Nov 2016 19:12

AW: PID eines 64Bit-Services unter 32Bit-Programm?
 
MSDN-Library durchsuchenEnumServicesStatusEx enumeriert ja alle Dienste. Darunter sind aber auch welche, die zur Zeit nicht gestartet sind und somit keine PID haben.

Mattze 21. Nov 2016 19:22

AW: PID eines 64Bit-Services unter 32Bit-Programm?
 
Hallo und, nun ja,
alles richtig.
Manche nennen die Dinger auch SID.
Andere noch andersch...
Bleibt die Frage, warum die Spalte im Taskmanager eigentlich "PID" heißt...
(Unter WMI - W32_Service - heißt das sogar ausgeschrieben "ProcessID"!)

Aber, darüber will ich nicht diskutieren,
Es geht nicht um den Namen, man kann auch "Apfel" dazu sagen, sondern darum, wozu und wie man es nutzen kann. Und besonders, wie man es kriegt.

Und da sind PID und SID doch ziemlich ähnlich.
Genau weiß ich keinen Unterschied.

Gruß
Mattze

PS:
>>EnumServicesStatusEx enumeriert ja alle Dienste. Darunter sind aber auch welche, die zur Zeit nicht gestartet sind und somit keine PID haben.<<
Oder bereits beendet sind. Richtig. Die meine ich natürlich nicht!

himitsu 21. Nov 2016 19:29

AW: PID eines 64Bit-Services unter 32Bit-Programm?
 
Zitat:

Zitat von Mattze
Also Service-Status: "wird ausgeführt", PID wird mit -1.

:-D

Es steht zwar nichts im MSDN, aber ich hätte das jetzt auch nach "bekanntem" Muster eingestufft.
0 = nicht vorhanden (inaktiv)
-1 = Fehler (z.B. keine Rechte)

Mattze 21. Nov 2016 20:06

AW: PID eines 64Bit-Services unter 32Bit-Programm?
 
Hallo himitsu,

das wäre ja nun schon wieder recht interessant.
Die -1 steht nämlich tatsächlich nur bei (einigen) Geräte- oder Dateitreibern.
(Jedenfalls sehe ich im Moment nix anderes.)

Mal sehen, ob zu ermitteln ist, was da als Rechte vielleicht fehlt und wie man sich die zuschustern kann...

Gruß
Mattze

Luckie 22. Nov 2016 00:27

AW: PID eines 64Bit-Services unter 32Bit-Programm?
 
Ach als Administrator ist man nicht all mächtig. Der Benutzer System hat noch höhere Rechte.

Aber wo für brauchst du die PIDs von den ganzen Diensten? Schreibst du ein System-Tool?

Mattze 22. Nov 2016 07:42

AW: PID eines 64Bit-Services unter 32Bit-Programm?
 
Hallo Luckie,

"Systemtool" ist vielleicht etwas hoch gegriffen.
Ich schreibe ein "SysInfo" und das aus reinem Interesse.
Ich will einfach mal gucken, wie weit ich komme.
(Mit Eurer und Netzhilfe usw.
Macht schon verdammt viel...)

Und da gehören eben auch die PIDs dazu.

Gruß
Mattze

Zacherl 22. Nov 2016 09:11

AW: PID eines 64Bit-Services unter 32Bit-Programm?
 
Schau dir mal himitsus Edit an:
Zitat:

Zitat von himitsu (Beitrag 1354337)
UserMode-Treiber und KernelMode-Treiber?
Werden die im KernelMode da auch aufgelistet? [edit2] SERVICE_KERNEL_DRIVER sagt ja.
Die werden ja außerhalb des UserMode-Systems ausgeführt und dort gibt es "diese" PID eventuell nicht.


Assarbad 27. Nov 2016 22:30

AW: PID eines 64Bit-Services unter 32Bit-Programm?
 
Zitat:

Zitat von Delphi-Laie (Beitrag 1354333)
Die PID ist eine Prozeß -ID. Dienste sind jedoch m.E. nicht mit dieser gleichzusetzen. Auf meinem Windows XP z.B. ist fünfmal die svchost.exe gestartet worden, also gibt es sie unter fünf verschiedenen IDs. Es sind jedoch wesentlich mehr Dienste, die auf diese Datei zurückgehen, gestartet worden.

Dienste können seit Windows 2000 als DLLs implementiert werden und werden dann in der Tat "gehostet". Denn bekanntlich wird eine DLL normalerweise in einen existierenden Prozeß geladen.

Zitat:

Zitat von Zacherl (Beitrag 1354338)
MSDN-Library durchsuchenEnumServicesStatusEx enumeriert ja alle Dienste. Darunter sind aber auch welche, die zur Zeit nicht gestartet sind und somit keine PID haben.

Bingo!

Zitat:

Zitat von himitsu (Beitrag 1354337)
UserMode-Treiber und KernelMode-Treiber?
Werden die im KernelMode da auch aufgelistet? [edit2] SERVICE_KERNEL_DRIVER sagt ja.
Die werden ja außerhalb des UserMode-Systems ausgeführt und dort gibt es "diese" PID eventuell nicht.

Treiber werden über die gleichen APIs wie Dienste installiert und gewartet. Das ist also theoretisch eine sehr sinnvolle Annahme.

Es gibt zwar PIDs auch kernelseitig, aber die sind von der Sache her irrelevant. Außerdem ist der Windows-(NT-)Kernel monolithisch und (Kernel-)Treiber werden ähnlich wie DLLs in den gleichen Adreßraum geladen. Daher könnten Treiber maximal mit der PID vom Pseudoprozeß "System" gezeigt werden.

Und ja, es gibt da noch ein relevantes Privileg: TCB.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:16 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