void CRestartAndShutdown::OnRestartcom()
{
CSystemCom systemcom;
if(systemcom.DoModal() == IDOK){
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
DWORD dwVersion;
dwVersion=GetVersion(); //取得当前操作系统的版本信息
if(dwVersion<0x80000000){ //当系统版本高于98时执行以下代码
OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken);
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);
ExitWindowsEx(EWX_REBOOT|EWX_FORCE,0);
}
else
ExitWindowsEx(EWX_REBOOT|EWX_FORCE,0);
}
}
void CRestartAndShutdown::OnShutdowncom()
{
CSystemCom systemcom;
if(systemcom.DoModal() == IDOK){
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
DWORD dwVersion;
dwVersion=GetVersion(); //取得当前操作系统的版本信息
if(dwVersion<0x80000000){ //当系统版本高于98时执行以下代码
OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken);
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);
ExitWindowsEx(EWX_SHUTDOWN|EWX_FORCE,0);
}
else
ExitWindowsEx(EWX_SHUTDOWN|EWX_FORCE,0);
}
}
void CRestartAndShutdown::OnLogoffCom()
{
// SendMessage(WM_CLOSE,0,0); //关闭登录窗口
/* CSystemCom systemcom;
if(systemcom.DoModal() == IDOK+1){
CDialog::OnOK();
AfxGetMainWnd()->PostMessage(WM_CLOSE,0,0); //关闭主界面
CLoginSystem login;
login.DoModal();
}*/
CSystemCom systemcom;
if(systemcom.DoModal() == IDOK){
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
DWORD dwVersion;
dwVersion=GetVersion(); //取得当前操作系统的版本信息
if(dwVersion<0x80000000){ //当系统版本高于98时执行以下代码
OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken);
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);
ExitWindowsEx(EWX_LOGOFF|EWX_FORCE,0);
}
else
ExitWindowsEx(EWX_LOGOFF|EWX_FORCE,0);
}
}