VC判断当前用户有无Administrator的权限(用EqualSid API函数判断与Admin是否在一个组

时间:2021-08-25 20:07:08

/************************************************************************/  

/* 函数说明:判断有无Administrator的权限                                      

/* 参    数:无                                  

/* 返 回 值:成功返回TRUE,,否则返回FALSE   

/* By:Koma   2009.07.28 23:30                               

/************************************************************************/  

BOOL IsAdmin()    

{    

    HANDLE hAccessToken;    

    BYTE * InfoBuffer = new BYTE[1024];    

    PTOKEN_GROUPS ptgGroups;    

    DWORD dwInfoBufferSize;    

    PSID psidAdministrators;    

    SID_IDENTIFIER_AUTHORITY siaNtAuthority = SECURITY_NT_AUTHORITY;    

      

    if(!OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY,&hAccessToken))    

    {    

        delete InfoBuffer;    

        return FALSE;    

    }    

      

    if(!GetTokenInformation(hAccessToken,TokenGroups,InfoBuffer,1024,&dwInfoBufferSize))    

    {    

        delete InfoBuffer;    

        CloseHandle(hAccessToken);    

        return FALSE;    

    }    

      

    CloseHandle(hAccessToken);    

      

    if(!AllocateAndInitializeSid(&siaNtAuthority,    

        2,    

        SECURITY_BUILTIN_DOMAIN_RID,    

        DOMAIN_ALIAS_RID_ADMINS,    

        0,0,0,0,0,0,    

        &psidAdministrators))    

    {    

        delete InfoBuffer;    

        return FALSE;    

    }    

      

    ptgGroups = (PTOKEN_GROUPS)InfoBuffer;    

      

    for(UINT i = 0; i < ptgGroups->GroupCount; i++)    

    {    

        if(EqualSid(psidAdministrators,ptgGroups->Groups[i].Sid))    

        {    

            FreeSid(psidAdministrators);    

            delete InfoBuffer;    

            return TRUE;    

        }    

    }    

    return FALSE;