重启计算机 vc代码
if (MessageBox(" Changed Pages. Let setting avail, /n you must reboot! Now, Reboot?",
"Notice", MB_YESNO) == IDNO)
{
MessageBox("Please Reboot later!", "Notice", MB_OK);
}
else
{
// reboot the system
// 判断当前使用的操作系统,重新启动系统
DWORD dwVersion = GetVersion();
if (dwVersion < 0x80000000)// Windows NT/2000/XP
{
RebootNTx86();
}
else// Windows 9x/ME
{
ExitWindowsEx(EWX_REBOOT, 0);// Reboot win 9x/me
}
}
// Reboot win NT/2000/xp
void CAllocateDlg::RebootNTx86()
{
HANDLE hToken = 0, hThread = 0;
DWORD dwRtn = 0;
hThread =(HANDLE)AfxGetApp()->m_hThread;
TOKEN_PRIVILEGES tp;
LUID luid;
tp.PrivilegeCount = 1;
if ( ! ::OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
{
MessageBox("Current proccess can't apply for the reboot priviledge!");
}
else
{
if ( ! LookupPrivilegeValue(NULL, // lookup privilege on local system
SE_SHUTDOWN_NAME, // privilege to lookup
&luid))
{
MessageBox("Current proccess can't apply for the reboot priviledge!");
}
else
{
// receives LUID of privilege
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
// Enable the privilege or disable all privileges.
AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES),
&tp, &dwRtn);
if (GetLastError() == ERROR_SUCCESS)
ExitWindowsEx(EWX_REBOOT, 0);
else
MessageBox("Current proccess can't apply for the reboot priviledge!");
}
CloseHandle(hToken);
}
}