簡體   English   中英

如何使用GetTokenInformation()恢復特權? C ++

[英]How to recover privileges with GetTokenInformation () ? c++

我想從用戶名中恢復所有特權。 例如特權:“ SE_ASSIGN_PRIMARY_TOKEN_PRIVILEGE”,“ SE_AUDIT_PRIVILEGE”,“ SE_DEBUG_PRIVILEGE” ...我在Microsoft文檔中進行搜索,發現GetTokenInformation() https://docs.microsoft.com/zh-cn/windows/desktop/api/ securitybaseapi / nf-securitybaseapi-gettokeninformation信息,但我不了解如何訪問所有特權並查看此特權的值。 有人會已經使用此方法作為示例或如何進行嗎?

您可以嘗試以下代碼:

#include <iostream>
#include <windows.h>
#include <tchar.h>

BOOL CheckWindowsPrivilege(const TCHAR *Privilege)
{
    /* Checks for Privilege and returns True or False. */
    LUID luid;
    PRIVILEGE_SET privs;
    HANDLE hProcess;
    HANDLE hToken;
    hProcess = GetCurrentProcess();
    if (!OpenProcessToken(hProcess, TOKEN_QUERY, &hToken)) return FALSE;
    if (!LookupPrivilegeValue(NULL, Privilege, &luid)) return FALSE;
    privs.PrivilegeCount = 1;
    privs.Control = PRIVILEGE_SET_ALL_NECESSARY;
    privs.Privilege[0].Luid = luid;
    privs.Privilege[0].Attributes = SE_PRIVILEGE_ENABLED;
    BOOL bResult;
    PrivilegeCheck(hToken, &privs, &bResult);
    return bResult;
}

int wmain(void)
{
    if (!CheckWindowsPrivilege(SE_ASSIGNPRIMARYTOKEN_NAME))
    {
        wprintf(L"I do not have SeAssignPrimaryTokenPrivilege!\n");
        return 1;
    }
    wprintf(L"I do have SeAssignPrimaryTokenPrivilege!\n");
    return 0;
}

然后調用SetPrivilege (不是win32 api,而是MSDN示例中的函數)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM