天天看点

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;
 */
  }