AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[Win2000] - Abmelden vom Dienst

Ein Thema von xZise · begonnen am 19. Dez 2007 · letzter Beitrag vom 2. Apr 2009
 
Dezipaitor

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

Re: [Win2000] - Abmelden vom Dienst

  Alt 28. Mär 2009, 12:31
Das sollte man lieber nicht so machen. Du personifizierst den aktuellen Benutzer und schaltest das Privileg aber vom Prozess.
Weiterhin kann JWSCL alles, was du da verwendet hast (mit Winapi)

Schau mal hier:
Delphi-Quellcode:
uses
  JwaWindows,
  JwsclToken,
  JwsclTypes,
  JwsclComUtils,
  JwsclVersion,
  JwsclUtils,
  JwsclPrivileges;


procedure ImpersonateAndExecute(const Flag : DWORD);
var
  Token : TJwSecurityToken;
  PrivScope : IJwPrivilegeScope;
begin
  //raises EJwsclUnsupportedWindowsVersionException
  // EJwsclPrivilegeCheckException, EJwsclWinCallFailedException
  Token := TJwSecurityToken.CreateWTSQueryUserToken(TOKEN_ALL_ACCESS);
  TJwAutoPointer.Wrap(Token);

  //raises EJwsclAccessTypeException, EJwsclSecurityException
  Token.ImpersonateLoggedOnUser;

  try
    if TJwWindowsVersion.IsWindows2000(true) then
    begin
      //raises EJwsclPrivilegeException
      PrivScope := JwGetPrivilegeScope([SE_SHUTDOWN_NAME]);

      if not ExitWindowsEx(Flag,0) then
        RaiseLastWin32Error;
    end;
  finally
    Token.RevertToSelf;
  end;
end;
Noch einfacher:
Delphi-Quellcode:
uses
  JwaWindows,
  JwsclImpersonation,
  JwsclTypes,
  JwsclComUtils,
  JwsclVersion,
  JwsclUtils,
  JwsclPrivileges,
  SysUtils;

procedure ImpersonateAndExecute(const Flag : DWORD);
var
  Imp : IJwImpersonation;
  PrivScope : IJwPrivilegeScope;
begin
  //raises EJwsclProcessIdNotAvailable
  //EJwsclWinCallFailedException
  Imp := JwImpersonateLoggedOnUser;

  if TJwWindowsVersion.IsWindows2000(true) then
  begin
    //raises EJwsclPrivilegeException
    PrivScope := JwGetPrivilegeScope([SE_SHUTDOWN_NAME]);

    if not ExitWindowsEx(Flag,0) then
      RaiseLastOSError;
  end;
end;
Beachte die Exceptions die da geworfen werden können + RaiseLastWin32Error.

Hoffe das hilft
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz