搜了个关机小例子,拿来调试一下。
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken)) {
AfxMessageBox("无法打开存取命令");
}
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(GetLastError()!=ERROR_SUCCESS) {
AfxMessageBox("无法关机");
}
//以上是取得当前用户的Token后,利用这个Token来取得权限才可以执行关机操作
//关机函数
if(!ExitWindowsEx(EWX_POWEROFF|EWX_FORCE,0)) {
AfxMessageBox("无法关机");
}
运行即关机。。
重启程序同理,只是关机函数参数不同
if(!ExitWindowsEx(EWX_REBOOT,0)) {
AfxMessageBox("无法重启");
}
运行即重启