Einzelnen Beitrag anzeigen

shadowman

Registriert seit: 1. Nov 2005
48 Beiträge
 
#5

Re: Von ProcessHandle zur ProcessID?

  Alt 9. Jun 2009, 21:30
Zitat von SirThornberry:
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.
Hallo,
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:
[...]
         bSuccess := OpenProcessToken(GetCurrentProcess, TOKEN_QUERY, hAccessToken);
[...]
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?).

Ü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:
   try
      result := OpenProcess(SYNCHRONIZE, False, ID);
   finally
      CloseHandle(result);
   end;
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.

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
  Mit Zitat antworten Zitat