zoukankan      html  css  js  c++  java
  • vc 判断当前用户是否在管理员组以及是否SYSTEM权限运行

    BOOL IsUserInAdminGroup() //判断是否在管理员组
    {
        BOOL fInAdminGroup = FALSE;
        HANDLE hToken = NULL;
        HANDLE hTokenToCheck = NULL;
        DWORD cbSize = 0;
    
        OSVERSIONINFO osver = {0};
        osver.dwOSVersionInfoSize = sizeof(osver);
    
        if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY | TOKEN_DUPLICATE, &hToken))
            goto Cleanup;
        if (!GetVersionEx(&osver))
            goto Cleanup;
        if (osver.dwMajorVersion >= 6)
        {
            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, 
            2, 
            SECURITY_BUILTIN_DOMAIN_RID, 
            DOMAIN_ALIAS_RID_ADMINS, 
            0, 0, 0, 0, 0, 0, 
            &pAdministratorsGroup))
        {
            dwError = GetLastError();
            goto Cleanup;
        }
    
        if (!CheckTokenMembership(NULL, pAdministratorsGroup, &fIsRunAsAdmin))
        {
            dwError = GetLastError();
            goto Cleanup;
        }
    
    Cleanup:
        if (pAdministratorsGroup) FreeSid(pAdministratorsGroup);
        return fIsRunAsAdmin;
    }
    
    
    if (!IsUserInAdminGroup())
    {
        exit(1);
    }
    
    if (IsRunAsAdmin())
    {
        code();
    }
  • 相关阅读:
    react组件之间传值方式
    html url 传递锚点并添加参数
    Spring Boot 构建WAR包
    Spring Boot Actuator 的使用
    Spring boot的启动加载原理
    intellij idea resin容器部署web工程
    Mybatis Mapper之见解
    踩坑----数据库阻塞
    redis缓存与数据库的记录不一致造成的问题.(乐观锁)
    H5中popstate事件的诡异行为
  • 原文地址:https://www.cnblogs.com/killbit/p/4756790.html
Copyright © 2011-2022 走看看