#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;
}