Einzelnen Beitrag anzeigen

NicoDE
(Gast)

n/a Beiträge
 
#3

Re: Administratorrechte anfordern (Elevation/Impersonation ?

  Alt 1. Jun 2007, 11:07
Zitat von OregonGhost:
Ich habe einen Dienst, nennen wir ihn Dienst.exe. Zum Installieren oder Deinstallieren benötigt man Administratorrechte (oder nicht?). Das ist bis hierhin unter Windows XP oder 2003 nicht weiter problematisch, unter Vista hingegen startet man bekanntermaßen ein Programm auch dann ohne Administratorrechte, wenn man als Administrator angemeldet ist.
Auch unter Windows XP konnte man ein Programm ohne administratives Token starten ('Ausführen als...' und die CheckBox aktivieren).

Zitat von OregonGhost:
Wenn jetzt also ein Benutzer
Code:
Dienst.exe -install
bzw.
Dienst.exe -uninstall
aufruft, und nur dann, soll das Programm als Administrator ausgeführt werden.
Ich gehe mal davon aus, dass die Datei nur von Administratoren (Install/Uninstall) und dem System (SCM) verwendet wird.
Ich sehe also keinen Grund, warum das 'Programm' von einem unterpriviligierten Benutzer verwendet werden sollte.
Zitat von OregonGhost:
Über ein Vista-Manifest highestAvailablePrivileges anfordern. Das bedeutet, dass das Programm, von einem Benutzer gestartet, von diesem Administratorrechte anfordert, ist das richtig? Also als Administrator muss man einmal auf Bestätigen klicken, als normaler Benutzer muss man Benutzername/Passwort eingeben? Oder startet das Programm dann als normaler Benutzer gar nicht oder mit niedrigeren Rechten?
[asInvoker(Standard)]
Admin = kein UAC-Dialog, eingeschränktes Token
Users = kein UAC-Dialog
[highestAvailable]
Admin = UAC-Dialog, komplettes Token
Users = kein UAC-Dialog
[requireAdministrator]
Admin = UAC-Dialog, komplettes Token
Users = UAC-Dialog mit Username/Passwort für Admin-Account

requireAdministrator wäre wohl das gesuchte.

Zitat von OregonGhost:
Und was passiert nun, wenn der SCM das Programm als Dienst starten möchte? Hat es dann eventuell höhere Rechte als notwendig (SYSTEM-Account)? Mir war so, als hätte ich auch von der Möglichkeit gelesen, einem Dienst so wenig Rechte wie möglich (aber so viel wie nötig) zuzuweisen.
In Versionen vor Windows Vista haben System-Dienste grundsätzlich alle Rechte. Erst in Vista kann man dem SCM (mittels API konfigurierbar) mitteilen, welche Rechte der Dienst wirklich braucht (bei Dienst-DLLs werden die Rechte der Gruppe zusammengesetzt).

Zitat von OregonGhost:
Gibt es alternativ die Möglichkeit, die Rechte erst später anzufordern, nämlich dann, wenn sie benötigt werden, und das am besten so, dass es unter XP auch funktioniert (wenn das dort überhaupt möglich ist)?
Ein laufender Prozess kann sein eingeschränktes Token nicht in ein komplettes Token 'umwandeln' lassen. Der Prozess muss also neu gestartet werden (z.B. mit ShellExecute und 'runas' als Verb - was bedeutet, dass das Programm anschließend mit administrativen Rechten läuft, um die nötigen Dialoge kümmert sich Windows).
  Mit Zitat antworten Zitat