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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章