Einzelnen Beitrag anzeigen

Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#20

Re: [Win2000] - Abmelden vom Dienst

  Alt 28. Mär 2009, 12:20
Zitat von xZise:
[...]Ist natürlich doof, dass der Dienst sich lieber beenden sollte, wenn das zurückgschalten fehlschlägt[...]
Ha ich weiß jetzt wieder, warum ich das gesagt habe

Ein Prozess unter einem anderem Benutzer ausführen - Teil 1 Impersonate
Mit der Funktion RevertToSelf wird die Verkörperung eines anderen Benutzers wieder aufgehoben. Aus Sicherheitsgründen sollte man den Prozess beenden, wenn diese Funktion fehlschlägt, da sonst der Prozess weiter unter den Benutzerrechten des anderen Benutzers ausgeführt wird.
(Siehe hier)

Was mich wieder zur Frage zurückbringt. Ich habe das erstmal so implementiert:
Delphi-Quellcode:
token := TJwSecurityToken.CreateWTSQueryUserToken(TOKEN_ALL_ACCESS);
try
  if ImpersonateLoggedOnUser(token.TokenHandle) then
  begin
    vi.dwOSVersionInfoSize:=SizeOf(vi);
    GetVersionEx(vi);
    if vi.dwPlatformId = VER_PLATFORM_WIN32_NT then // Windows NT
    begin
      OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,hToken);
      LookupPrivilegeValue(nil,'SeShutdownPrivilege',tp.Privileges[0].Luid);
      tp.PrivilegeCount := 1;
      tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
      h := 0;
      AdjustTokenPrivileges(hToken,False,tp,0,PTokenPrivileges(nil)^,h);
      CloseHandle(hToken);
      Result := ExitWindowsEx(flag,0);
    end;
  end;
finally
  token.Free;
end;
MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat