Einzelnen Beitrag anzeigen

Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#33

AW: Zugriff auf Registry eines eingeschränkten Benutzerkontos mit Adminrechten

  Alt 5. Jan 2012, 23:12
Ich habe gerade alles durchgelesen und verstehe immernoch nichts.

Krze Fragen:

1. Windows XP oder Vista oder 7?
2. Es läuft irgendein SQL Server als Dienst. Den willst du starten und stoppen als Admin?
3. Du willst auf die Registry des Benutzers zugreifen. Dort stehen irgendwelche Einstellungen drin?

Ich folgere:
Du hast ein Programm, das kann ohne Adminrechte irgend etwas machen (z.B. Registry des Users benutzen). Aber manchmal willst du darin auch den SQL Server steuern (starten/stoppen). Dafür brauchst du Adminrechte.
Deshalb muss der Benutzer derzeit schon von Anfang an dein Programm als Admin starten. Aber dann kannst du die Benutzereinstellungen des normalen Benutzers nicht nutzen, sondern nur vom Admin. Alles korrekt?

Jetzt kommt Frage 1 ins Spiel: Ich verstehe nicht, wie keiner danach fragen konnte?
Unter XP ist der Administrator ein eigenes Benutzerkonto mit eigener Registry. Ab Vista ist ein Administrator erst einmal ein normaler User und wird durch eine Abfrage an den Nutzer (UAC) für einen Prozess zum Admin. Aber es gibt auch Benutzer, die keine Admins sind und bei denen wieder ein echter Admin sich anmelden muss, der dann natürlich wie in XP mit eigener Registry ankommt.

Für Vista ist die Lösung einfach. Baue den Code für die SQL Serversteuerung aus der Anwendung aus und setze sie in eine COM-DLL (nennt sich COM Elevation Moniker). Mit Windows kann diese DLL als Admin ausgeführt werden, ohne dass dein Prozess dazu Adminrechte braucht.
In XP geht es leider nicht. Stattdessen musst du einen neuen Prozess mit Adminrechten (z.B. ShellExecute und Verb = runas) starten, der eben den SQL Server stoppt/startet. Du kannst z.B. deiner Anwendung Kommandozeilenparameter verpassen, um dies zu machen und dann eben die eigene Anwendung kurzzeitig nochmal sicht selbst starten lassen (über Verb = runas).
Über den Prozessrückgabewert kannst du Fehler prüfen oder auch eine Kommunikation über Pipes, Events und MemoryMapped Files herstellen. Die Sache ist also einfach: Dein Prozess läuft ohne Admin und startet dann kurzzeitig einen weiteren Prozess mit Adminrechten, der die SQL Serversteuerung übernimmt: Teile und herrsche
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat