C/C++编程 关闭、重启、注销Windows系统

#include <stdio.h>
#include <windows.h>

/*
    GetCurrentProcessID     得到当前进程的ID
    OpenProcessToken        得到进程的令牌句柄
    LookupPrivilegeValue    查询进程的权限
    AdjustTokenPrivileges   启用令牌权限
*/

int main(void)
{
    HANDLE hToken;
    TOKEN_PRIVILEGES tkp;

    // 获取进程的访问令牌
    if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
        return -1;

    // 获得本地机唯一的标识,查看系统权限的特权值,返回信息到一个LUID结构体里
    LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);

    tkp.PrivilegeCount = 1;
    tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

    // 通知系统修改进程权限,获取关闭系统权限
    AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES)NULL, 0);

    if (GetLastError() != ERROR_SUCCESS)
        return -2;
    // 关闭、重启、注销系统等操作
    if (!ExitWindowsEx(EWX_LOGOFF,0))
        return -3;
    CloseHandle(hToken);
    return 0;
}

/*
//如果函数成功,返回值为非零
BOOL ExitWindowsEx(	//退出,重启或注销系统
    UINT uFlags,		//关闭参数
    DWORD dwReserved	//系统保留,一般取0
);

uFlags:
        EWX_FORCE:	强制终止进程,不会发送消息给目前在系统中运行的程序
        EWX_LOGOFF:	关闭所有进程,然后注销用户
        EWX_POWEROFF:	关闭系统并关闭电源,该系统必须支持断电
        EWX_REBOOT:	关闭系统,然后重新启动系统
        EWX_SHUTDOWN:	关闭系统,安全地关闭电源
*/

 

发布了46 篇原创文章 · 获赞 20 · 访问量 29万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章