Entwickler-Ecke
Windows API - Prüfen, ob ein Prozess Adminrechte hat
LittleBen - Mi 07.11.12 22:02
Titel: Prüfen, ob ein Prozess Adminrechte hat
Guten Abend,
gibt es eine Funktion, mit der man anhand der PID (oder des Handles) feststellen kann, ob der Prozess über Adminrechten verfügt?
Die Funktion zum Überprüfen, ob der User diese Rechte hat, ist mir bekannt.
Viele Grüße,
Littleben
LittleBen - Mi 07.11.12 22:32
:zustimm: Jup, das kenn ich schon ;)
elundril - Do 08.11.12 02:22
Soweit ich herausgefunden habe laufen Prozesse die mit UAC gestartet wurden im Integrity-Mode "High". Demnach könntest du einfach den Integrity-Mode eines Prozesses herausfinden und nachsehen ob dieser auf High gesetzt ist. Wie man das macht findest du auf
dieser MSDN-Seite [
http://msdn.microsoft.com/en-us/library/bb625966.aspx]
lg elundril
LittleBen - Do 08.11.12 16:24
Vielen Dank! Das ist das, was ich gesucht habe. Nur habe ich noch ein kleines verständnis Problem.
GetCurrentProcess gibt laut MSDN nur ein pseudo Handle zurück und um die Rechte eines anderen Prozesses herauszubekommen, muss ich ja dessen pseudo Handle herausfinden. Nur wie?
Zitat: |
A pseudo handle is a special constant, currently (HANDLE)-1, that is interpreted as the current process handle. For compatibility with future operating systems, it is best to call GetCurrentProcess instead of hard-coding this constant value. The calling process can use a pseudo handle to specify its own process whenever a process handle is required. Pseudo handles are not inherited by child processes. |
http://msdn.microsoft.com/en-us/library/windows/desktop/ms683179%28v=vs.85%29.aspx
jaenicke - Do 08.11.12 23:09
LittleBen hat folgendes geschrieben : |
Aber dieses "richtige" Handle kann ja an der stelle OpenProcessToken gar nicht gebrauchen :P |
:gruebel: :?!?:
Du gibst das einfach an OpenProcessToken und fertig. :nixweiss: Die Funktion ist mit einem richtigen Handle genauso glücklich wie mit dem Pseudohandle für den eigenen Prozess, warum auch nicht?
LittleBen - Do 08.11.12 23:15
Nönönö :P Gibt eine Exception aus (Code kommt morgen, PC schon aus).
jaenicke - Do 08.11.12 23:49
Dann liegt das vielleicht daran:
Zitat: |
The process must have the PROCESS_QUERY_INFORMATION access permission.
|
Welchen Fehlercode bekommst du denn?
LittleBen - Fr 09.11.12 23:02
PROCESS_QUERY_INFORMATION habe ich als Argument drin...
Ich bekomme die Fehlermeldung: "Externe Exception C0000008"
jaenicke - Fr 09.11.12 23:19
Mit ansonsten dem geposteten Quelltext?
LittleBen - Fr 09.11.12 23:42
Entschuldigung, ich nehme alles zurück... :autsch:
Ich habe per OpenProcess probiert, ein Prozess mit Administratorrechten zu öffnen und danach nicht abgefragt, ob der Wert 0 ist. Und da ich diesen Prozess nicht öffnen darf, war das Handle 0. Kann ich das Handle auch ohne Adminrechte herausfinden?
Martok - Sa 10.11.12 00:48
Du kannst das dann ja triangulieren ;)
Wenn du Admin bist, bekommst du ein Handle und davon eine korrekte Antwort.
Wenn du nicht Admin bist, bekommst du entweder Handle&Antwort (die dann "nein" ist) oder kein Handle, was bedeutet dass der Prozess ein höheres Level hat und dann höchstwahrscheinlich entweder Admin oder SystemService ist... :zwinker:
LittleBen - Sa 10.11.12 11:49
Das ist natürlich eine sehr saubere Lösung :P Werde es nachher mal ausprobieren.
EDIT: Wo wir schon beim Thema sind ist mir eingefallen: Ist es möglich dieses Integrity Level eines Prozesses zu verändern (angenommen man ist Admin)?
jaenicke - Sa 10.11.12 16:33
Man kann nicht nachträglich den Adminstatus ändern, nein. Aus Sicherheitsgründen wird ausschließlich beim Starten eines Prozesses entschieden, ob dieser als Admin läuft oder nicht. Hinterher lässt sich das nicht ändern.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!