如何使用 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/en-us/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 示例中的函数)
我想恢复用户名的所有权限。例如特权:"SE_ASSIGN_PRIMARY_TOKEN_PRIVILEGE"、"SE_AUDIT_PRIVILEGE"、"SE_DEBUG_PRIVILEGE"...我搜索了 Microsoft 文档并找到了 GetTokenInformation() https://docs.microsoft.com/en-us/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 示例中的函数)