Herunterfahren des Systems

Im folgenden Beispiel wird die ExitWindowsEx-Funktion verwendet, um das System herunterzufahren. Durch das Herunterfahren werden Dateipuffer auf dem Datenträger geleert und das System in eine Bedingung versetzt, in der es sicher ist, den Computer auszuschalten. Die Anwendung muss zuerst die berechtigung SE_SHUTDOWN_NAME aktivieren. Weitere Informationen finden Sie unter Berechtigungen.

#include <windows.h>

#pragma comment(lib, "user32.lib")
#pragma comment(lib, "advapi32.lib")

BOOL MySystemShutdown()
{
   HANDLE hToken; 
   TOKEN_PRIVILEGES tkp; 
 
   // Get a token for this process. 
 
   if (!OpenProcessToken(GetCurrentProcess(), 
        TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) 
      return( FALSE ); 
 
   // Get the LUID for the shutdown privilege. 
 
   LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, 
        &tkp.Privileges[0].Luid); 
 
   tkp.PrivilegeCount = 1;  // one privilege to set    
   tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 
 
   // Get the shutdown privilege for this process. 
 
   AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, 
        (PTOKEN_PRIVILEGES)NULL, 0); 
 
   if (GetLastError() != ERROR_SUCCESS) 
      return FALSE; 
 
   // Shut down the system and force all applications to close. 
 
   if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 
               SHTDN_REASON_MAJOR_OPERATINGSYSTEM |
               SHTDN_REASON_MINOR_UPGRADE |
               SHTDN_REASON_FLAG_PLANNED)) 
      return FALSE; 

   //shutdown was successful
   return TRUE;
}

Der letzte Parameter im Aufruf von ExitWindowsEx gibt an, dass das System für ein Planungsupdate des Betriebssystems heruntergefahren wurde. Weitere Informationen finden Sie unter Ursachencodes für das Herunterfahren des Systems.

Herunterfahren