C++ 实现系统注销,重启,关机的方法 (二)

2014-11-24 02:02:58 · 作者: · 浏览: 3
用AdjustTokenPrivileges来提升我们需要的系统权限
if(!AdjustTokenPrivileges(hToken,FALSE,&tkp,sizeof(TOKEN_PRIVILEGES),NULL,NULL))
{
CloseHandle(hToken);
return FALSE;
}
return TRUE;
}

#pragma region 用来提升系统权限
//这是一个通用的提升权限函数,如果需要提升其他权限
//更改LookupPrivilegeva lue的第二个参数SE_SHUTDOWN_NAME,即可
BOOL EnableShutDownPriv()
{
HANDLE hToken=NULL;
TOKEN_PRIVILEGES tkp={0};
//打开当前程序的权限令牌
if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken))
{
return FALSE;
}
//获得某一特定权限的权限标识LUID,保存在tkp中
if (!LookupPrivilegeva lue(NULL,SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid))
{
CloseHandle(hToken);
return FALSE;
}
tkp.PrivilegeCount=1;
tkp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
//调用AdjustTokenPrivileges来提升我们需要的系统权限
if(!AdjustTokenPrivileges(hToken,FALSE,&tkp,sizeof(TOKEN_PRIVILEGES),NULL,NULL))
{
CloseHandle(hToken);
return FALSE;
}
return TRUE;
}调用方法:


[cpp] ReSetWindows(EWX_LOGOFF,false);//注销

ReSetWindows(EWX_LOGOFF,false);//注销[cpp] view plaincopyprint ReSetWindows(EWX_REBOOT,true);//重启

ReSetWindows(EWX_REBOOT,true);//重启[cpp] view plaincopyprint ReSetWindows(EWX_SHUTDOWN,true);//关机

ReSetWindows(EWX_SHUTDOWN,true);//关机大家测试的时候一定要在虚拟机上测试,不然一运行系统熄火了岂不是很郁闷!