if(m_nReboot==0)
    {
        if(ExitWindowsEx(EWX_REBOOT, 0)) goto Exit;
        if(ExitWindowsEx(EWX_REBOOT | EWX_FORCE, 0)) goto Exit;
        //因为上面的重起不成功,所以需要调整本进程的特权
        HANDLE hToken;
        TOKEN_PRIVILEGES tkp;
        if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken)) goto Exit;
        //获取重起的特权SE_SHUTDOWN_NAME
        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 (!ExitWindowsEx(EWX_REBOOT, 0))
            ExitWindowsEx(EWX_REBOOT | EWX_FORCE, 0);
    }

Exit:
    CDialog::OnClose();

相关文章:

  • 2022-12-23
  • 2021-06-09
  • 2022-12-23
  • 2021-04-25
  • 2021-05-21
  • 2021-12-25
  • 2021-12-14
  • 2022-01-22
猜你喜欢
  • 2022-12-23
  • 2021-11-02
  • 2021-05-06
  • 2021-06-01
  • 2021-12-05
  • 2021-12-09
  • 2021-10-02
相关资源
相似解决方案