Announcement

Collapse
No announcement yet.

Explorer.exe über CreateProcessAsUser starten

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Explorer.exe über CreateProcessAsUser starten

    Hallo,

    Braucht man unter NT4 ein bestimmtes Privileg, um von einem "normalen" Account aus per CreateProcessAsUser den Explorer mit Admin-Rechten zu starten?
    Jedes andere Programm macht keine Macken, nur der Explorer ziert sich.

    Mein Code sieht etwa so aus:
    <code><br>LogonUser('Administrator','MyDomain','My Passw',.......);
    <br>CreateProcessAsUser(hToken1,nil,'Explorer.ex e c:\winnt',nil,nil,......);</code>
    <br>
    Wie gesagt, jedes andere Programm lässt sich so problemlos starten, nur Explorer.exe nicht.

    Weiß jemand Rat?

  • #2
    Könntest Du mal ein komplettes Beispiel für CreateProcessAsUser mit Admin-Rechten reinstellen. Bei mir geht es überhaupt nicht

    Comment


    • #3
      Wichtig ist dabei, dass der entsprechende Benutzer, der diese Funktion LogonUser verwenden soll, das Recht "Als Teil des Betriebssystems handeln" hat (NT-Benutzer-Manager, "Richtlinien", "Benutzerrechte", "Weitere Benutzerrechte anzeigen"). Um CreateProcessAsUser auszuführen, braucht man die Rechte "Anheben einer Quote", "Ersetzen eines Tokens auf Prozessebene" und "Erstellen eines Tokenobjekts".

      Ein entsprechendes Stück Code könnte dann so aussehen (ich hoffe, es haben sich keien Tippfehler eingeschlichen, und die Formatierung ist wahrscheinlich ziemlich konfus):
      <code><br><br>
      procedure RunAsAdmin;<br>
      var<br>
      &nbsp; App, AdminName, AdminPassw, Domain: String;<br>
      &nbsp; Token1: Integer;<br>
      &nbsp; sInfo: TStartupInfo;<br>
      &nbsp; pInfo: TProcessInformation;<br>
      begin<br>
      &nbsp; App:='C:\Winnt\Notepad.exe';
      &nbsp; sInfo.cbSize:=sizeof(sInfo);<br>
      &nbsp; AdminName:='Administrator';<br>
      &nbsp; AdminPassw:='abcDEfghIJ';<br>
      &nbsp; Domain:='Domain1';<br>
      &nbsp; if not LogonUser(PChar(AdminName), PChar(Domain), PChar(AdminPassw), &nbsp;LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, Token1) then<br>
      &nbsp;&nbsp; ShowMessage('Fehler beim Aufruf von LogonUser: '+inttostr(GetLastError));<br>
      &nbsp; if not CreateProcessAsUser(Token1,nil,PChar(App),nil,nil, 0,0,nil,nil,sInfo,pInfo) then
      &nbsp;&nbsp; ShowMessage('Fehler beim Aufruf von CreateProcessAsUser: '+inttostr(GetLastError));<br>
      end;<br>

      Wenn GetLastError den Fehlercode 1314 zurückgibt, fehlt dem Benutzer irgendein Recht, das er zum Ausführen der entsprechenden Funktion braucht

      Comment

      Working...
      X