![]() |
Von ProcessHandle zur ProcessID?
Hey,
ich steh grade aufm Schlauch .. irgendeine einfache Funktion war das .. ich hab nur den Namen vergessen :wall: Kann mir kurz jemand helfen? Gruß |
Re: Von ProcessHandle zur ProcessID?
wie kommst du denn an das Prozesshandle? anhand eines WindowHandles wüsste ich wie man die ProzessID bekommt aber um ein Prozesshandle zu bekommen nutzt man eigentlich die ProzessID. Bei dir scheints aber umgekehrt zu sein, daher eben die Frage wie du an das Prozesshandle kommst.
|
Re: Von ProcessHandle zur ProcessID?
Über ShellExecuteEx .. egal macht auch nichts .. habs jetzt über CreateProcess gemacht. Da bekomme ich auch die PID.
|
Re: Von ProcessHandle zur ProcessID?
Zitat:
![]() Zitat:
|
Re: Von ProcessHandle zur ProcessID?
Zitat:
die Beiträge hier sind schon etwas älter, aber ich hoffe hier dennoch die Lösung für mein Problem finden zu können. In der zitierten Antwort hört es sich so an, als wäre es möglich, von der ProcessID zu ProcessHandle zu kommen. Genau das brauche ich, jedoch scheint es alles andere als einfach zu sein. Wie mache ich das denn? Ich brauche es, um unter Vista prüfen zu können, ob ein Programm mit den "echten" Adminrechten läuft oder nicht. Hierfür habe ich eine Funktion gefunden, die u.a. das hier macht:
Delphi-Quellcode:
Hier wird allerdings meine eigene Anwendung verwendet (GetCurrentProcess). Da ich das auch für andere Anwendungen einsetzen wollte, habe ich die Funktion so angepasst, dass man Prozess-Handle übergibt (das liefert GetCurrentProcess ja zurück, bloß zu der eigenen Anwendung, oder?).
[...]
bSuccess := OpenProcessToken(GetCurrentProcess, TOKEN_QUERY, hAccessToken); [...] Über den Exe-Namen ermittle ich die Prozess-ID und bräuchte nun das Prozess-Handle. Habe hierzu diesen Code gefunden und ausprobiert:
Delphi-Quellcode:
Jedoch scheint OpenProcess nicht richtig zu funktionieren. Die Werte ändern sich bei jedem Aufruf und daher kann es keinen eindeutigen Werte geben, denke ich. OpenProcessToken liefert dann immer "false" zurück, so dass die Prüfung nach den Rechten gar nicht erst stattfindet.
try
result := OpenProcess(SYNCHRONIZE, False, ID); finally CloseHandle(result); end; Irgendwo habe ich gelesen, dass OpenProcess unter Vista generell nicht richtig funktioniert. Ob der Weg bisher der richtige ist und ich mache dabei was falsch oder ob es der falsche Weg ist: die Frage ist in beiden Fällen gleich: Wie komme ich von der PID zum Prozess-Handle? Muss ich das überhaupt, um die Rechte nicht nur der eigenen Anwendung zu prüfen (s.o.) oder geht es irgendwie anders? Das Thema müsste ja für die meisten Entwickler früher oder später interessant und wichtig werden, so dass ich gedacht hätte, dass es da mit Sicherheit Lösungen geben müsste, jedoch scheint es viele viele diverse Code-Beispiele und Ansätze zu geben, jedoch nichts endgültiges, was funktioniert. Wäre schön, wenn jemand etwas Licht ins Dunkel bringen könnte :) |
Re: Von ProcessHandle zur ProcessID?
Handles sind Handles. Die ID eines Prozesses oder eines Threads ist bis zum Tod eindeutig. Handles sind hingegen einfach Bezeichner. Sie identifizieren nicht das Objekt, sondern eine Beziehung zu einem Objekt (irgendjemand hat Handle mal mit Henkel übersetzt). Daher ist es auch kein Wunder, dass der Rückgabewert bei jedem Aufruf anders ist. Bezüglich OpenProcessToken solltest du mal die Dokumentation lesen.
Zitat:
|
Re: Von ProcessHandle zur ProcessID?
Genau, OpenProcess ist schon richtig, um das Handle eines Prozesses anhand der PID zu ermitteln, allerdings scheinen deine Parameter fehlerhaft zu sein. Versuch mal:
Delphi-Quellcode:
Das Handle sollte dann gültig sein, ist aber wie schon erwähnt bei jedem Aufruf verschieden.
hProcess := OpenProcess(PROCESS_ALL_ACCESS, false, PID);
Edit: Dass OpenProcess() unter Vista nicht mehr funktioniert stimmt auf keinen Fall :mrgreen: Währe ja schlimm .. Edit: Okay es wird nicht funktionieren, wenn du mit einem restrikted Token Programm versuchst eine elevated Application zu öffnen, aber das ist auch nur ein Rechte Problem. Startest du bei aktivierter UAC deine Anwendung als Administrator, kannst du selbstverständlich alle Programmhandles öffnen. Nur für SYSTEM Prozesse benötigst du weitere Debug Privilegien. |
Re: Von ProcessHandle zur ProcessID?
Auch wenns völlig am derzeitigen Thema vorbei geht einige Ergänzungen zum Originalthema:
![]() |
Re: Von ProcessHandle zur ProcessID?
GetProcessID für win95+ gibts hier: (auch wenns jetzt nicht gesucht wird)
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:18 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