Einzelnen Beitrag anzeigen

Dezipaitor

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

Re: XP shutdownbefehle

  Alt 21. Nov 2007, 14:35
Das Herunterfahren hat nichts mit Adminrechten zu tun.
Man kann die Gruppe Administratoren und den Benutzer Administrator so einstellen, dass er nichts mehr machen kann.
Es geht nur um das Shutdown Privileg, was Administratoren und Hauptbenutzer normal haben.
Die Privilegien sind immer angepasst! Denn was die Gruppen und Benutzer so mächtig macht, sind eben die Privilegien.

Seht unter den lokalen Kontorichtlinen mit "gpedit.msc" - dem PolicyEditor nach. Da kann man auch dem Gast Shutdownrechte geben.

Zitat von JB-1990:
das mit den Adminrechten werd ich noch rausbekommen, aber theoretisch braucht man keine, da "Start"-->"Herunterfahren"-->"was auch immer" auch auf die Shutdown.exe zugreifen müsste...
Dein Benuter hat eben das Shutdownprivileg. Und shutdown.exe wird nicht augerufen. Im Gegenteil. Shutdown.exe und jedes andere Programm verwendet die MSDN API Funktion ExitWindowsEx oder WMI direkt.

Zitat von JB-1990:
Zitat von Dezipaitor:
Außerdem wäre es eine "Herausforderung" die shutdown.exe in allen Rafinessen nachzubauen. Dabei lernt man wirklich eine Menge.
Verwendet shutdown.exe einen Dienst, um die ganzen Dinge, wie Dialoganzeige zu machen? Würde ich mal denken, oder?
Meine Meinung...kein Plan, wie Windows das macht,aber denke ma schon, wäre ma interessant zu wissen, kennt sich jemand damit aus.

RunDLL32.EXE powrprof.dll,SetSuspendState
das funzt, habsch auch schon eingebaut, macht aber wie gesagt nur standby und ich will nicht erst über Standby in den Ruhezustand...hab da was gefunden:

Ruhezustand.bat
powercfg /hibernate on
rundll32.exe powrprof.dll,SetSuspendState

Standby.bat
powercfg /hibernate off
rundll32.exe powrprof.dll,SetSuspendState

Wie kann ich sowas in ein Prog. einbauen ohne gleich die *.bat zu erstellen.
Mit powercfg aktivierst du den Ruhezustand, auch wenn ihn der Benutzer ausgeschaltet hat in der Systemsteuerung. Danach schaltest du ihn explizit aus und der Benutzer kann den Ruhezustand nicht mehr über den Explorer verwenden.

Mit rundll32 rufst du eine Funktion auf, die in der powrprof.dll enthalten ist. Diese Funktion SetSuspendState kann man direkt aufrufen über Delphi und sogar noch mit Parameter befüllen. Zudem bekommt man Informationen über Fehler.

Ich würde dir empfehlen, direkt die Funktionen zu verwenden und nicht über Batch-Dateien zu gehen. Man verwendet Batch nur dann, wenn mal kurz und einfach etwas benötigt und mein keine Ahnung von Programmierung hat oder der Aufwand dafür zu groß wäre. Für den Zwischenfall gäbe es ja auch noch die MS Windows Skript Sprache, die extra für soetwas gemacht wurde. (sorry keine Ahnung, wie die wirklich heißt).


In der JEDI Security Code Library gibt es dieses Beispiel, welches versucht den Rechner herunterzufahren. Man kann es natürlich für die anderen Stadien anpassen.


Delphi-Quellcode:
(*
This demonstration tries to shutdown your computer by enabling the
needed privilege and calling the WinAPI-function afterwards.
The shutdown will be cancelled after ten seconds.
*)


program SimpleShutdown;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  JwaWindows,
  JwsclExceptions,
  JwsclToken;

var
  Token: TJwSecurityToken;

begin
  try
    Token:=TJwSecurityToken.CreateTokenByProcess(GetCurrentProcess,
      TOKEN_ADJUST_PRIVILEGES or TOKEN_READ or TOKEN_QUERY);
  except
    on E: EJwsclOpenProcessTokenException do
    begin
      Writeln(E.Message);
      Readln;
      Exit;
    end;
  end;
  try
    if Token.PrivilegeAvailable[SE_SHUTDOWN_NAME] then
    begin
      Writeln('SE_SHUTDOWN_NAME is available');
      Token.PrivilegeEnabled[SE_SHUTDOWN_NAME]:=True;
    end
    else
      Writeln('SE_SHUTDOWN_NAME is not available');
  finally
    FreeAndNil(Token);
  end;

  if not InitiateSystemShutdown(nil, 'The computer will be shut down in 60 seconds.', 60, False, False) then
    Writeln(SysErrorMessage(GetLastError))
  else
  begin
    Sleep(10000);
    AbortSystemShutdown(nil); //stops the shutdown
  end;

  Readln;
end.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat