下面这个函数实现了让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
文章评论