下面这个函数实现了让Windows系统重启的功能,首先是提升权限,然后主要是函数ExitWindowsEx的使用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
void xxxxxDlg::RestartPC() { HANDLE ToHandle; TOKEN_PRIVILEGES tkp; //打开本进程访问token if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &ToHandle)) { //修改本进程权限 LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid); tkp.PrivilegeCount = 1; tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; //通知系统已修改 AdjustTokenPrivileges(ToHandle, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0); //获得权限后关闭计算机,要实现注销或重启则对应EWX_LOGOFF,EWX_REBOOT ExitWindowsEx(EWX_REBOOT | EWX_FORCE, 0); } } |
ExitWindowsEx函数使用说明参考:https://msdn.microsoft.com/en-us/library/windows/desktop/aa376868(v=vs.85).aspx
文章评论