天天看點

WindowsAPI關機、重新開機

#include "Windows.h"
 

//強制關閉計算機
bool systemShutDown()
 
{
     HANDLE hToken;
 
    TOKEN_PRIVILEGES tkp;

 
    //擷取程序标志
     if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) {
         return false;
 
    }
 
    //擷取關機特權的LUID
     LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);
     tkp.PrivilegeCount = 1;
 
    tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

 
    //擷取這個程序的關機特權
     AdjustTokenPrivileges(hToken, false, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0);
     if (GetLastError() != ERROR_SUCCESS) {
         return false;
 
    }

 
    // 強制關閉計算機
     if ( !ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0)) {
         return false;
     }
     return true;
 /*
     // 強制重新開機計算機
      if ( !ExitWindowsEx(EWX_REBOOT| EWX_FORCE, 0))
            return false;
      return true;
 */
  }