Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 14 von 14
  1. #11
    'Alter Hase' Avatar von X21
    Registriert seit
    29.09.2007
    Beiträge
    219

    Standard

    Zitat Zitat von f0Gx
    Die ExitWindowsEx-Methode ist auf allen Fällen vorzuziehen. Zum Einen ist sie sauberer (schließlich programmieren wir, und scripten kein Batch-File ) und zum anderen schneller, da der unnötige Dateizugriff auf die shutdown.exe (der gerne mal von Securitylösungen überwacht wird) wegfällt, da diese ja auch nur ein Wrapper für die API ist.
    Kaspersky z.B. wenns richtig eingestellt is überwacht jegliche veränderungen zugriffe und extrem die Systemdateien! :]

  2. #12
    Trojaner Avatar von BlackSpike666
    Registriert seit
    28.08.2007
    Beiträge
    67

    Standard

    Code:
     unit Unit2;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
    
    type
     TShutdownWindowsType = (swtShutdown, swtShutdownPowerOff, swtRestart, swtLogoff);
      TForm2 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
    
      private
      function
      ShutdownWindows (aType: TShutdownWindowsType): Boolean;
        { Private-Deklarationen }
      public
        { Public-Deklarationen }
      end;
    
        function ShutdownWindows (aType: TShutdownWindowsType): Boolean;
    var
      Form2: TForm2;
      OSVersionInfo: TOSVersionInfo;
      hToken: THandle;
      hProcess: THandle;
      TokenPriv: TTokenPrivileges;
      ReturnLength: DWORD;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm2.Button1Click(Sender: TObject);
    function ShutdownWindows (aType: TShutdownWindowsType): Boolean;
    
    const
      cSE_SHUTDOWN_NAME = 'SeShutdownPrivilege';
      cFlagValue: Array [TShutdownWindowsType] Of UINT = (
          EWX_SHUTDOWN, EWX_SHUTDOWN or EWX_POWEROFF, EWX_REBOOT, EWX_LOGOFF
        );
     begin
      Result := False;
    
      // Die Windowsversion holen
      OSVersionInfo.dwOSVersionInfoSize := SizeOf (OSVersionInfo);
      if not GetVersionEx (OSVersionInfo) then
        Exit;
    
      // Prüfen ob Windows NT
      if OSVersionInfo.dwPlatformId = VER_PLATFORM_WIN32_NT then
    begin
           hProcess := GetCurrentProcess;
          if not OpenProcessToken (hProcess, TOKEN_ADJUST_PRIVILEGES, hToken) then
            Exit;
    
          if not LookupPrivilegeValue (nil, cSE_SHUTDOWN_NAME, TokenPriv.Privileges[0].Luid) then
            Exit;
    
          TokenPriv.PrivilegeCount := 1;
          TokenPriv.Privileges [0].Attributes := SE_PRIVILEGE_ENABLED;
    
          if not AdjustTokenPrivileges (
              hToken, False, TokenPriv, 0,
              PTokenPrivileges (nil)^, ReturnLength
            )
          then
            Exit;
    
          CloseHandle (hToken);
    end;
          ShutdownWindows := ExitWindowsEx (cFlagValue [aType], $FFFFFFFF);
    end;
    
    end.
    Wiso Kann ich diesen Code nicht Compilieren??

    GruZZ BlackSpike666 :twisted:

    Ps: Danke für die Hilfe =)

  3. #13
    Anfänger
    Registriert seit
    22.07.2007
    Beiträge
    22

    Standard

    Wenn du den Fehler etwas genauer beschreibst kann vlt. besser geholfen werden

    Hast du denn alles selber neu in dein Programm geschriebn oder hast du einfach nur kopiert und eingefügt, da könnte vlt der Fehler liegen

  4. #14
    Trojaner Avatar von BlackSpike666
    Registriert seit
    28.08.2007
    Beiträge
    67

    Standard

    Jaa ich habe es =)

    danke für die vielen Hilfen =)

    Gruß BlackSpike666 :twisted:

Seite 2 von 2 ErsteErste 12

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •