vc 判断当前用户是否在管理员组以及是否SYSTEM权限运行
2024-08-30 07:47:02
BOOL IsUserInAdminGroup() //判断是否在管理员组
{
BOOL fInAdminGroup = FALSE;
HANDLE hToken = NULL;
HANDLE hTokenToCheck = NULL;
DWORD cbSize = ; OSVERSIONINFO osver = {};
osver.dwOSVersionInfoSize = sizeof(osver); if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY | TOKEN_DUPLICATE, &hToken))
goto Cleanup;
if (!GetVersionEx(&osver))
goto Cleanup;
if (osver.dwMajorVersion >= )
{
TOKEN_ELEVATION_TYPE elevType;
if (!GetTokenInformation(hToken, TokenElevationType, &elevType, sizeof(elevType), &cbSize))
goto Cleanup;
if (TokenElevationTypeLimited == elevType)
{
if (!GetTokenInformation(hToken, TokenLinkedToken, &hTokenToCheck, sizeof(hTokenToCheck), &cbSize))
goto Cleanup;
}
} if (!hTokenToCheck)
{
if (!DuplicateToken(hToken, SecurityIdentification, &hTokenToCheck))
goto Cleanup;
} BYTE adminSID[SECURITY_MAX_SID_SIZE];
cbSize = sizeof(adminSID);
if (!CreateWellKnownSid(WinBuiltinAdministratorsSid, NULL, &adminSID, &cbSize))
goto Cleanup;
if (!CheckTokenMembership(hTokenToCheck, &adminSID, &fInAdminGroup))
goto Cleanup; Cleanup:
if (hToken) CloseHandle(hToken);
if (hTokenToCheck) CloseHandle(hTokenToCheck);
return fInAdminGroup;
} BOOL IsRunAsAdmin() //判断是否以管理员权限运行
{
BOOL fIsRunAsAdmin = FALSE;
DWORD dwError = ERROR_SUCCESS;
PSID pAdministratorsGroup = NULL; SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;
if (!AllocateAndInitializeSid(
&NtAuthority,
,
SECURITY_BUILTIN_DOMAIN_RID,
DOMAIN_ALIAS_RID_ADMINS,
, , , , , ,
&pAdministratorsGroup))
{
dwError = GetLastError();
goto Cleanup;
} if (!CheckTokenMembership(NULL, pAdministratorsGroup, &fIsRunAsAdmin))
{
dwError = GetLastError();
goto Cleanup;
} Cleanup:
if (pAdministratorsGroup) FreeSid(pAdministratorsGroup);
return fIsRunAsAdmin;
} if (!IsUserInAdminGroup())
{
exit();
} if (IsRunAsAdmin())
{
code();
}
最新文章
- 第三次个人作业—“K米”评测
- 系统无法开始服务器进程。请检查用户名和密码。 (Exception from HRESULT: 0x8000401A)
- 冲刺阶段 day12
- C++学习之Pair
- 1.交通聚类:编辑距离 (Levenshtein距离)Java实现
- N的阶乘末尾0的个数和其二进制表示中最后位1的位置
- Oracle 12c与GoldenGate 12c的一些问答
- C# 算速表达式
- asp.net ImageMap控件
- JQuery - MD5加密
- 记一次解决curl https证书问题
- linux 文件系统操作()
- Python数据分析学习-re正则表达式模块
- 『备注』&;#x; 格式 的编码转换
- leetcode 链表类型题目解题总结
- Airbnb Javascript 代码规范重要点总结es6
- MyEclipse使用总结——设置MyEclipse开发项目时使用的JDK
- python爬虫之git的使用
- 2018-2019-2 20189206 Python3学习
- Java基础(basis)-----关键字break、continue、return的区别