Einzelnen Beitrag anzeigen

Dezipaitor

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

AW: Service: UAC Elevated Child Prozess im Benutzerkontext starten

  Alt 9. Mai 2011, 23:14
Glückwunsch für diesen Akt. Ich will deine Freude nicht schmälern, aber den Code hättest du sicher auch mit etwas Suche und Geduld hier in irgendeiner Form gefunden. Trotzdem ist die daraus gewonnene Erkenntnis und Erfahrung unersetzlich und wird dir bei ähnlichen Problemen helfen.



Wenn du eine Anwendung mit Manifest, aber ohne Admintoken in CreateProcessAsUser starten willst, wird CPAU fehlschlagen und die Fehlermeldung ERROR_ELEVATION_REQUIRED (740) über GetLastError zurückmelden. Dann muss man ShellExecute (nicht im Dienst, sondern über extra Prozess!) verwenden.

Jedes Tokenn besitzt ein Feld LinkedToken, das ein weiteres Token enthält. Wenn UAC aktiv ist, dann bekommt man darüber das Admintoken. Das Admintoken hat auch so ein Feld und man bekommt darüber das eingeschränkte Token. Es ist also ein Ringschluss. Nun ist es aber dennoch möglich auch als normaler Benutzer das Admintoken über dieses Feld zu laden, jedoch verweigert CPAU und ImpersonateLoggedOnUser die Nutzung. Mehr Info siehe dazu in der Hilfe zur letztgenannten Funktion.

Enums haben tatsächlich keine exakte Größe, wenn man allgemein spricht. Man kann aber Compilern normalerweise irgendwie mitteilen, wie groß mindestens ein Enum sein soll, z.B. in Delphi mit $MINENUMSIZE (oder ähnlich). MS C++ Compiler kann es auch und das Windows SDK nutzt es auch. Am sichersten kannst du es sehen, indem du den Datentyp in C mit sizeof auf dessen Größe prüfst.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat