![]() |
Re: [Win2000] - Abmelden vom Dienst
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:
Noch einfacher:
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;
Delphi-Quellcode:
Beachte die Exceptions die da geworfen werden können + RaiseLastWin32Error.
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; Hoffe das hilft :cheers: |
Re: [Win2000] - Abmelden vom Dienst
Hallo Dezipaitor (diesmal kopiert ^^ ),
also ich habe vergessen zu erwähnen :oops: das wir inzwischen mit Windows XP arbeiten. Was könnte das für Änderungen im Code nach sich ziehen? MfG xZise |
Re: [Win2000] - Abmelden vom Dienst
Funktioniert nur mit dem ersten in der Konsole angemeldeten Benutzer.
|
Re: [Win2000] - Abmelden vom Dienst
Und was heißt in diesem Kontext "im konsole angemeldeten Benutzer"?
MfG xZise |
Re: [Win2000] - Abmelden vom Dienst
Das Token kommt von
demjenigen Benutzer, der sich zuerst direkt per Tastatur anmeldet. Wenn er FUS verwendet oder einfach per RDP angemeldet hat, funktioniert es so nicht. |
Re: [Win2000] - Abmelden vom Dienst
Hallo Dezipaitor,
Zitat:
Delphi-Quellcode:
MfG
function ImpersonateAndExecute(const Flag : DWORD) : Boolean;
var Imp : IJwImpersonation; PrivScope : IJwPrivilegeScope; begin Result := true; try //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 else AddToLog('Not W2k+'); except on e: Exception do begin AddToLog(e.Message); // on e : EJwsclProcessIdNotAvailable do Result := false; // on e : EJwsclWinCallFailedException do Result := false; end; end; end; xZise |
Re: [Win2000] - Abmelden vom Dienst
Du verwendest eine alte Version. Dieser Fehler wurde behoben und kann über Subversion beseitigt werden. Bitte mache ein
![]() |
Re: [Win2000] - Abmelden vom Dienst
Okay also Herunterfahren funktioniert schonmal. Wegen den Abmelden gibt es noch das Problem, dass ich zuerst den Benutzername benötige, der aber leider noch nicht funktioniert.
Okay inzwischen tut es das, aber es gibt folgenden Fehler: Zitat:
xZise |
Re: [Win2000] - Abmelden vom Dienst
Hallo ich bin es nochmal.
Und ich wollte sagen, dass mich an dem Code wundert, das die Variable "Imp" nicht verwendet wird? MfG xZise |
Re: [Win2000] - Abmelden vom Dienst
Die wird am Ende von Delphi zerstört - Interface eben.
Ich weiß aber gerade nicht, ob die Variable überhaupt benötigt wird - kann es mir aber gut vorstellen, da das Ignorieren des Rückgabewertes die Variable zerstört (mglw.). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:56 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