Ich sehe, dass es eine Menge Verwirrung über dieses Thema gibt und die Antwort von Kate hier ist nicht korrekt und unvollständig.
Seit Vista kann ein Admin angemeldet sein, aber seine Prozesse laufen nicht automatisch hoch. Ein Admin hat ein sogenanntes "Split Token". Dies bedeutet, dass möglicherweise Prozesse für den Benutzer SAME admin ausgeführt werden, von denen einige auf Hochebene ausgeführt werden und andere nicht auf Hochebene ausgeführt werden. Wenn ein Administrator einen nicht erhöhten Prozess ausführt, wurden einige der Berechtigungen seines Tokens entfernt. Es ist nicht mehr wie in XP, wo ALLE Prozesse entweder erhöht oder nicht erhöht ausgeführt werden.
Installieren Sie Process Explorer von www.sysinternals.com und aktivieren Sie die Spalte "Integrity Level". Wenn Sie dort "Mittel" sehen, wird dieser Prozess nicht erhöht ausgeführt. Wenn Sie dort "High" sehen, läuft der Prozess erhöht. Wenn der Prozess mit der Integritätsstufe "Hoch" ausgeführt wird, ist keine UAC-Eingabeaufforderung erforderlich, um einen anderen erhöhten Prozess zu starten.
Wenn die Benutzerkontensteuerung vollständig deaktiviert ist, werden ALLE Prozesse "Hoch" ausgeführt, sodass keine Erhöhung erforderlich ist. UAC kann unter
HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System
Einstellung der Taste "EnableLUA
" ausgeschaltet. Das Ändern dieser Einstellung erfordert einen Neustart.
Aber es gibt einen anderen Punkt, der hier noch nicht erwähnt wurde. In der Systemsteuerung ist es möglich, "Elevate ohne Aufforderung" zu konfigurieren. Und in diesem Fall kann ein Admin-Benutzer einen erhöhten Prozess von einem anderen nicht erhöhten Prozess aus starten, und es wird KEINE UAC-Eingabeaufforderung angezeigt.
Diese Einstellung wird unter dem gleichen Registrierungspfad im Schlüssel "" für Administratoren gespeichert.
Für alle Nicht-Admin-Benutzer gibt es den Schlüssel "ConsentPromptBehaviorUser
", aber dies ändert nur das Verhalten, aber die Höhe kann nicht ausgeschaltet werden. Nicht-Admins erhalten immer eine UAC-Eingabeaufforderung. (Wenn UAC nicht vollständig ausgeschaltet ist)
Wie wissen Sie, wenn Ihr Prozess erhöht läuft: Anruf OpenProcess()
, dann OpenProcessToken()
, dann GetTokenInformation(TokenElevation)
.
Und die Integrity Level Anruf erhalten GetTokenInformation(TokenIntegrityLevel)
und dann GetSidSubAuthority()
Also, wenn Sie Ihr Symbol angezeigt werden soll nur, wenn Erhebung wirklich erforderlich ist, müssen Sie überprüfen, ob Ihr Prozess erhöhten läuft und zusätzlich diese Registrierungsschlüssel überprüfen und Sie müssen wissen, ob der Benutzer ein Administrator ist oder nicht. Dies betrifft mehrere Zeilen Code, und ich würde dieses Symbol immer anzeigen, wenn die Höhe erforderlich ist, um es einfach zu halten.
Bitte beachten Sie, dass die API IsUserAnAdmin()
veraltet ist. Es darf seit Vista nicht mehr verwendet werden. Zu überprüfen, ob ein Benutzer zur Administratorengruppe gehört, ist jetzt viel mehr Code.
Dies ist eine gut geschriebene Frage, wenn ich eine gesehen habe. – badp
@badp: Ich habe darüber nachgedacht und recherchiert, aber es verwirrt mich immer noch, da es zu einfach scheint ... vielleicht habe ich einige Randbedingungen nicht berücksichtigt. – Wizard79