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();
    }
  • 相关阅读:
    BZOJ3193: [JLOI2013]地形生成
    ARG102E:Stop. Otherwise...
    51NOD1847:奇怪的数学题
    大型大常数多项式模板(已卡常...)
    CF932G Palindrome Partition
    51nod1538:一道难题(常系数线性递推/Cayley-Hamilton定理)
    HTML——meta标签
    HTTP 格式
    Node.js——Async
    设计模式——外观模式
  • 原文地址:https://www.cnblogs.com/killbit/p/4756790.html
Copyright © 2011-2022 走看看