BOOL GetProcessElevation(TOKEN_ELEVATION_TYPE * pElevationType, BOOL *pIsAdmin)
{
HANDLE hToken = nullptr;
DWORD dwSize;
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken))
{
return FALSE;
}
BOOL bResult = FALSE;
if (GetTokenInformation(hToken,TokenElevationType, pElevationType, sizeof(TOKEN_ELEVATION_TYPE),&dwSize))
{
if (*pElevationType == TokenElevationTypeLimited)
{
//获取一个未筛选的令牌,然后判断其中是否包含一个管理员SID。
HANDLE hUnfilteredToken = nullptr;
GetTokenInformation(hToken, TokenLinkedToken, (void*)&hUnfilteredToken, sizeof(HANDLE), &dwSize);
//创建一个管理员组的SID。
BYTE adminSID[SECURITY_MAX_SID_SIZE];
dwSize = sizeof(adminSID);
CreateWellKnownSid(WinBuiltinAdministratorsSid, nullptr, &adminSID, &dwSize);
//检查一个令牌的权限组。
if (CheckTokenMembership(hUnfilteredToken, &adminSID, pIsAdmin))
{
bResult = TRUE;
}
}
else
{
//Tests whether the current user is a member of the Administrator's group.
*pIsAdmin = IsUserAnAdmin();
bResult = TRUE;
}
}
CloseHandle(hToken);
return bResult;
}进程权限有关
最新推荐文章于 2024-02-03 11:25:48 发布
本文介绍了一个C/C++函数,用于检测当前进程的提升类型及是否为管理员权限运行。通过使用Windows API函数OpenProcessToken和GetTokenInformation来获取进程令牌信息,并判断令牌类型。此外,还展示了如何进一步检查未过滤令牌中是否包含管理员SID。
5274

被折叠的 条评论
为什么被折叠?



