标签:USE GROUP IsAdminProcess C++ pTokenGroups 管理员 Groups dwAttributes UAC
本文只发布于:https://www.cnblogs.com/Icys/p/IsAdminProcess.html
BOOL IsAdminProcess(UINT PID)
{
if (PID <= 0)
PID = GetCurrentProcessId();
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, PID);
if (hProcess == NULL) {//要么没这个进程,要么也有可能是ADMIN权限无法打开
return TRUE;
}
HANDLE hToken;
DWORD dwAttributes;
DWORD isAdmin(0);
if (OpenProcessToken(hProcess, TOKEN_QUERY, &hToken))
{
SID_IDENTIFIER_AUTHORITY Authority;
Authority.Value[5] = 5;
PSID psidAdmin = NULL;
if (AllocateAndInitializeSid(&Authority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &psidAdmin))
{
DWORD dwCount = 0;
GetTokenInformation(hToken, TokenGroups, NULL, 0, &dwCount);
TOKEN_GROUPS *pTokenGroups = (TOKEN_GROUPS *)new BYTE[dwCount];
GetTokenInformation(hToken, TokenGroups, pTokenGroups, dwCount, &dwCount);
DWORD dwGroupCount = pTokenGroups->GroupCount;
for (DWORD i = 0; i < dwGroupCount; i++)
{
if (EqualSid(psidAdmin, pTokenGroups->Groups[i].Sid))
{
dwAttributes = pTokenGroups->Groups[i].Attributes;
isAdmin = (dwAttributes & SE_GROUP_USE_FOR_DENY_ONLY) != SE_GROUP_USE_FOR_DENY_ONLY;
break;
}
}
delete[] pTokenGroups;
FreeSid(psidAdmin);
}
CloseHandle(hToken);
}
CloseHandle(hProcess);
return isAdmin;
}
标签:USE,GROUP,IsAdminProcess,C++,pTokenGroups,管理员,Groups,dwAttributes,UAC 来源: https://www.cnblogs.com/Icys/p/IsAdminProcess.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。