主题:VC中关机-重启-注销-休眠
// 休眠
INT SetPower()
{
// 令牌权限
TOKEN_PRIVILEGES tp;
// 令牌句柄
HANDLE hProcessToken;
// 某权限的本地唯一标识
LUID luid;
// 获得当前进程访问令牌的句柄
if(!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES, &hProcessToken ))
{
AfxMessageBox("OpenProcessToken Error.");
return -1;
}
// 获取shutdown权限的的本地唯一标识
if(!LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &luid))
{
AfxMessageBox("LookupPrivilegeValue Error." );
return -2;
}
// 权限数量
tp.PrivilegeCount = 1;
// 权限的唯一标识
tp.Privileges[0].Luid = luid;
// 开启
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
// 设置令牌权限
AdjustTokenPrivileges(hProcessToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES),
NULL, NULL );
SetSystemPowerState(FALSE,TRUE);
return 0;
}
// 关机
INT Shutdown()
{
// 令牌权限
TOKEN_PRIVILEGES tp;
// 令牌句柄
HANDLE hProcessToken;
// 某权限的本地唯一标识
LUID luid;
// 获得当前进程访问令牌的句柄
if(!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES, &hProcessToken ))
{
AfxMessageBox("OpenProcessToken Error.");
return -1;
}
// 获取shutdown权限的的本地唯一标识
if(!LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &luid))
{
AfxMessageBox("LookupPrivilegeValue Error." );
return -2;
}
// 权限数量
tp.PrivilegeCount = 1;
// 权限的唯一标识
tp.Privileges[0].Luid = luid;
// 开启
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
// 设置令牌权限
AdjustTokenPrivileges(hProcessToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES),
NULL, NULL );
ExitWindowsEx(EWX_FORCE |EWX_SHUTDOWN,0);
return 0;
}
// 重启
INT Reboot()
{
// 令牌权限
TOKEN_PRIVILEGES tp;
// 令牌句柄
HANDLE hProcessToken;
// 某权限的本地唯一标识
LUID luid;
// 获得当前进程访问令牌的句柄
if(!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES, &hProcessToken ))
{
AfxMessageBox("OpenProcessToken Error.");
return -1;
}
// 获取shutdown权限的的本地唯一标识
if(!LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &luid))
{
AfxMessageBox("LookupPrivilegeValue Error." );
return -2;
}
// 权限数量
tp.PrivilegeCount = 1;
// 权限的唯一标识
tp.Privileges[0].Luid = luid;
// 开启
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
// 设置令牌权限
AdjustTokenPrivileges(hProcessToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES),
NULL, NULL );
ExitWindowsEx(EWX_FORCE |EWX_REBOOT,0);
return 0;
}
// 注销
INT LogOFF()
{
// 令牌权限
TOKEN_PRIVILEGES tp;
// 令牌句柄
HANDLE hProcessToken;
// 某权限的本地唯一标识
LUID luid;
// 获得当前进程访问令牌的句柄
if(!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES, &hProcessToken ))
{
AfxMessageBox("OpenProcessToken Error.");
return -1;
}
// 获取shutdown权限的的本地唯一标识
if(!LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &luid))
{
AfxMessageBox("LookupPrivilegeValue Error." );
return -2;
}
// 权限数量
tp.PrivilegeCount = 1;
// 权限的唯一标识
tp.Privileges[0].Luid = luid;
// 开启
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
// 设置令牌权限
AdjustTokenPrivileges(hProcessToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES),
NULL, NULL );
ExitWindowsEx(EWX_FORCE |EWX_LOGOFF,0);
return 0;
}