
JonaGik
Ist es möglich, eine C++-Anwendung unter Windows auszuführen, um zur Laufzeit Administratorrechte vom Betriebssystem anzufordern?
Ich weiß, dass es zur Kompilierzeit gemacht werden kann, aber ich kann anscheinend nirgendwo finden, ob es zur Laufzeit gemacht werden kann.
Danke für Ihre Hilfe!
BEARBEITEN: Was ist, wenn ich möchte, dass die aktuelle Instanz erhöhte Berechtigungen hat? Beispielsweise habe ich möglicherweise Daten im Speicher, die ich behalten möchte.
Wenn Sie möchten, dass die Anwendung immer erhöht wird, können Sie ihr ein Manifest geben, indem Sie entweder eines erstellen (nicht technisch kompilieren) oder indem Sie ein externes Manifest in denselben Ordner wie die EXE-Datei legen. Wenn Sie sich als Person entscheiden möchten, es mit erhöhten Rechten auszuführen, klicken Sie mit der rechten Maustaste auf die EXE-Datei oder die Verknüpfung und wählen Sie Als Administrator ausführen. Wenn Sie es aus Code starten, verwenden Sie als @vcsjones-Kommentare die runas
Verb, wenn Sie diesen Prozess starten. Zum Beispiel:
ShellExecute( NULL,
"runas",
"c:\\windows\\notepad.exe",
" c:\\temp\\report.txt",
NULL, // default dir
SW_SHOWNORMAL
);
Sie können einen Prozess nur während seiner Erstellung erhöhen. Wenn ein Prozess bereits ausgeführt wird, gibt es keine Möglichkeit, sein Sicherheitstoken zu ändern: Er wird entweder mit erhöhten Rechten ausgeführt oder nicht.
Wenn Ihre Anwendung eine Verwaltungsaufgabe ausführen muss und normalerweise ohne erhöhte Rechte ausgeführt wird, müssen Sie eine weitere EXE-Datei erstellen, die mit ihrem Manifest die Erhöhung anfordert. Um einen erhöhten Prozess zu starten, müssen Sie verwenden ShellExecute
oder ShellExecuteEx
Funktion. Von Ihrem Hauptprozess aus benötigen Sie eine Möglichkeit, die Befehle an diesen neuen Prozess zu übergeben, der mit erhöhten Rechten ausgeführt wird.
Weitere Informationen zu UAC finden Sie unter Entwerfen von UAC-Anwendungen für Windows Vista Serie.

Adam Rosenfield
Nicht ganz, aber Sie können das Gegenteil tun – Sie können tropfen Privilegien, wenn Sie sie bereits haben. Sie können Ihr Programm also als Administrator starten lassen, indem Sie eine der von Kate Gregory aufgelisteten Methoden verwenden. Lassen Sie dann Ihre nicht benötigten Privilegien fallen; Informationen dazu finden Sie unter Löschen von Berechtigungen in C++ unter Windows.
Fügen Sie Ihrer EXE-Datei wie hier beschrieben eine Manifestdatei hinzu.
http://msdn.microsoft.com/en-us/library/bb756929.aspx
Ihrem Prozess (und Threads) ist ein Token zugewiesen. Mit diesem Token sind bereits alle Ihre Gruppen eingerichtet. Unter UAC ist die Administratorgruppe deaktiviert. UAC entfernt diese deaktivierte Gruppe, sodass Sie am Ende ein vollständiges Administrator-Token haben.
Um dasselbe zu erreichen, müssen Sie über das TCB-Privileg verfügen. Mit anderen Worten, um einen Prozess zur Laufzeit zu erhöhen, benötigen Sie Hilfe von einem Prozess, der unter dem SYSTEM-Konto ausgeführt wird, und Microsoft stellt weder einen noch eine API bereit, um die aktuelle UAC-Implementierung zu steuern. Andernfalls würde es den Zweck vereiteln.
Der Vollständigkeit halber gibt es eine Whitelist von Prozessen, die einige Vorgänge mit erhöhten Rechten ohne Aufforderung ausführen können. Kurz gesagt, Ihre ausführbaren Anforderungen:
- Von Microsoft zu unterzeichnen
- Zum Ausführen vordefinierter Operationen, wie mit IFileOperation
Die beste Erklärung, die ich gefunden habe, ist dieser Hack. Es wurde seitdem behoben, wirft aber etwas Licht auf die ganze Sache.
10132200cookie-checkAnfordern von Administratorrechten zur Laufzeityes
Mit können Sie einen weiteren Prozess starten
runas
Verb.– vcsjones
20. Juni 2011 um 23:47 Uhr
Gemäß der Bearbeitung: Sieht so aus, als müssten Sie den Programmstatus serialisieren, damit Sie ihn wieder in den neuen Prozess einlesen können.
– Markieren Sie Lösegeld
21. Juni 2011 um 2:24 Uhr
Eine weitere Option – die App in einem speziellen Modus startbar machen, in dem sie lediglich als Mittel zum Ausführen von Aufgaben dient, die erhöhte Berechtigungen erfordern, IPC zum Kommunizieren der Daten verwenden – dies hat den netten Bonus, dass die App nicht neu gestartet wird (UI-Kontext wird beibehalten ) — und das UAC-Fenster zeigt den gleichen App-Namen (was eine vollständige Illusion von Privilegien gibt, die zur Laufzeit eskaliert werden :)) < /look-ma-we-tricked-Windows >
– mlvljr
9. November 2015 um 21:14 Uhr
Wie kann es zur Kompilierzeit gemacht werden?
– MDXF
2. März 2017 um 23:06 Uhr
@MDXF stackoverflow.com/a/19617989/1422096
– Basj
18. Juli 2017 um 13:35 Uhr