Öffnen / Schreiben von Dateien als Administrator / root unter Verwendung von C ++ (UAC / gksudo / etc.)

StackOverflow https://stackoverflow.com/questions/1403266

  •  05-07-2019
  •  | 
  •  

Frage

Die Anwendung arbeite ich an erfordert die Fähigkeit, bestimmte geschützte Dateien über Linux, OSX und Windows [Vista] zu bearbeiten. Im Allgemeinen, wenn eine Anwendung etwas mit erhöhten Rechten tun muss, erscheint ein Passwort-Abfrage Dialog mit der Abfrage, um überprüfen sie der Anwendung zulassen wollen, dass diese Vorgänge als Administrator auszuführen.

ich im allgemeinen glaube, Windows Vista Manifest-Dateien nutzt, hat OSX die Authorization-Bibliothek ( https://developer.apple.com/mac/library/documentation/Security/Reference/authorization_ref/Reference/reference.html ) und Linux hat eine Vielzahl von sudo Frontends.

Gibt es einen allgemein akzeptable Cross-Plattform-Weg, dies zu umgehen? Ich will nicht meine Anwendung als Root-Benutzer ausgeführt werden müssen, aber ich will es eine geschützte Datei für Lese- / Schreiboperationen öffnen zu können, dann wieder in dem normalen Benutzermodus wieder aufzunehmen.

War es hilfreich?

Lösung

Für Windows Vista, müssen Sie grundsätzlich einen eigenen Prozess administrative Maßnahmen zu tun. Wie Sie sagen, muss der Admin-fähigen Prozess ein Manifest der angeforderten Ausführungsebene (siehe diese MSDN-Artikel für Details).

Wenn Sie genau auf jeder Windows-Anwendung suchen, die beginnt nicht erhöhten und unterstützt „erhebend“ selbst, werden Sie sehen, dass es tatsächlich ein ganz neues Verfahren eröffnet einmal Administratorrechte benötigt werden (zB um den Task-Manager gehen, wenn UAC aktiviert ist klicken sie auf „Show Prozesse aller Benutzer“ und beachten sie, wie es mit Administratorrechten wieder geöffnet).

So für Windows, die Architektur, die Sie wahrscheinlich brauchen würden zwei Prozesse erfordern: ein Standardprozess der meiste Arbeit zu tun, und ein Admin-Prozess ins Leben zu rufen, die Admin-Operationen zu tun. Die beiden Prozesse müssten über einige sichere Mittel (vielleicht ein Named Pipe sichern), so könnte die admin-Arbeit im Namen des Standardprozesses erfolgen.

Dieser Ansatz auf anderen Plattformen verallgemeinerbar sein kann, und vielleicht in einer Art von Klasse / Schnittstelle abstrahiert werden könnte, so dass plattformspezifische Details nicht undicht durch müssen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top