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);//关机大家测试的时候一定要在虚拟机上测试,不然一运行系统熄火了岂不是很郁闷!