AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Von ProcessHandle zur ProcessID?
Thema durchsuchen
Ansicht
Themen-Optionen

Von ProcessHandle zur ProcessID?

Ein Thema von Zacherl · begonnen am 7. Jul 2007 · letzter Beitrag vom 10. Jun 2009
 
shadowman

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

Re: Von ProcessHandle zur ProcessID?

  Alt 9. Jun 2009, 20: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
 


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 08:51 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