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
Antwort Antwort
Seite 3 von 4     123 4      
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, 13: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
Benutzerbild von xZise
xZise

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

Re: [Win2000] - Abmelden vom Dienst

  Alt 29. Mär 2009, 16:46
Hallo Dezipaitor (diesmal kopiert ^^ ),
also ich habe vergessen zu erwähnen das wir inzwischen mit Windows XP arbeiten. Was könnte das für Änderungen im Code nach sich ziehen?

MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Dezipaitor

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

Re: [Win2000] - Abmelden vom Dienst

  Alt 29. Mär 2009, 16:57
Funktioniert nur mit dem ersten in der Konsole angemeldeten Benutzer.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

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

Re: [Win2000] - Abmelden vom Dienst

  Alt 29. Mär 2009, 17:25
Und was heißt in diesem Kontext "im konsole angemeldeten Benutzer"?

MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Dezipaitor

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

Re: [Win2000] - Abmelden vom Dienst

  Alt 29. Mär 2009, 17:29
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.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

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

Re: [Win2000] - Abmelden vom Dienst

  Alt 30. Mär 2009, 17:46
Hallo Dezipaitor,

Zitat:
An Exception of type EJwsclProcessIdNotAvailable was raised.
(Data was given by programmer and can vary from actual source.)
Source method....: Create
Source class.....: TJwImpersonation
Source file......: JwsclImpersonation.pas
Source line......: 0
GetLastError.....: 1400 ($578)
GetLastErrorMsg..: Ungültiges Fensterhandle

Message : The process "Progman1" (Id: 0x0) could not be found.
mit folgenden Code:
Delphi-Quellcode:
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;
MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Dezipaitor

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

Re: [Win2000] - Abmelden vom Dienst

  Alt 30. Mär 2009, 20:29
Du verwendest eine alte Version. Dieser Fehler wurde behoben und kann über Subversion beseitigt werden. Bitte mache ein Subversion-Update (z.b. mit TortoiseSVN)
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

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

Re: [Win2000] - Abmelden vom Dienst

  Alt 31. Mär 2009, 18:17
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:
Systemfehler. Code: 1.
Unzulässige Funktion
MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

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

Re: [Win2000] - Abmelden vom Dienst

  Alt 1. Apr 2009, 17:24
Hallo ich bin es nochmal.

Und ich wollte sagen, dass mich an dem Code wundert, das die Variable "Imp" nicht verwendet wird?

MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Dezipaitor

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

Re: [Win2000] - Abmelden vom Dienst

  Alt 1. Apr 2009, 20:24
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.).
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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 19:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz