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;
}
进程权限有关
最新推荐文章于 2019-10-11 20:15:41 发布