#include<stdio.h>
#include<windows.h>
bool _closecomputer(int flag)
{
//以下代码主要功能就是提权
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
if (!OpenProcessToken(GetCurrentProcess() ,TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY ,&hToken))
{
return false;
}
if ( !LookupPrivilegeValue( NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid ) )
{
CloseHandle( hToken );
return false;
}
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if ( !AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof(TOKEN_PRIVILEGES), NULL, NULL ) )
{
CloseHandle( hToken );
return false;
}
//以上所有代码都是为了提权,是为下面的函数做准备工作的
//下面这个关机函数,如果权限不够,是不能被执行的
ExitWindowsEx(EWX_POWEROFF ,flag);
return true;
}
int main(void)
{
_closecomputer(0);
return 0;
}