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();
}

最新文章

  1. 第三次个人作业—“K米”评测
  2. 系统无法开始服务器进程。请检查用户名和密码。 (Exception from HRESULT: 0x8000401A)
  3. 冲刺阶段 day12
  4. C++学习之Pair
  5. 1.交通聚类:编辑距离 (Levenshtein距离)Java实现
  6. N的阶乘末尾0的个数和其二进制表示中最后位1的位置
  7. Oracle 12c与GoldenGate 12c的一些问答
  8. C# 算速表达式
  9. asp.net ImageMap控件
  10. JQuery - MD5加密
  11. 记一次解决curl https证书问题
  12. linux 文件系统操作()
  13. Python数据分析学习-re正则表达式模块
  14. 『备注』&#x; 格式 的编码转换
  15. leetcode 链表类型题目解题总结
  16. Airbnb Javascript 代码规范重要点总结es6
  17. MyEclipse使用总结——设置MyEclipse开发项目时使用的JDK
  18. python爬虫之git的使用
  19. 2018-2019-2 20189206 Python3学习
  20. Java基础(basis)-----关键字break、continue、return的区别

热门文章

  1. JavaWeb关于session生命周期的几种设置方法
  2. 贝叶斯网(2)Netica:从数据中学习CPT
  3. 1804 小C的多边形
  4. B. No Time for Dragons(贪心)
  5. EasyNVR摄像机无插件直播安装使用错误原因解析
  6. 解决IE,z-index失效
  7. Delphi重定义的消息结构
  8. [置顶] 我的Android进阶之旅------>Android中制作和查看自定义的Debug版本Android签名证书
  9. make编译四
  10. 201704 F-47创建预付款申请a