获取当前系统用户是管理员权限还是普通用户权限

来源:互联网 发布:java闰年的计算方法 编辑:程序博客网 时间:2024/05/05 00:54

BOOL   WINAPI   IsAdminMode()
{
       HANDLE                                       hAccessToken;
        BYTE                                           *InfoBuffer;
        PTOKEN_GROUPS                        ptgGroups;
        DWORD                                         dwInfoBufferSize;
        PSID                                           psidAdministrators;
        SID_IDENTIFIER_AUTHORITY   siaNtAuthority   =   SECURITY_NT_AUTHORITY;
        UINT                                           i;
        BOOL                                           bRet   =   FALSE;

        if(!OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY,&hAccessToken))
goto   cleanup;

        InfoBuffer   =   new   BYTE[1024];
        if(!InfoBuffer)
goto   cleanup;

bRet   =   GetTokenInformation(hAccessToken,
TokenGroups,
InfoBuffer,
1024,
&dwInfoBufferSize);

        CloseHandle(hAccessToken);

        if(!bRet)
goto   cleanup;
        if(   !AllocateAndInitializeSid(&siaNtAuthority,
2,
SECURITY_BUILTIN_DOMAIN_RID,
DOMAIN_ALIAS_RID_ADMINS,
0,0,0,0,0,0,&psidAdministrators)   )
goto   cleanup;

        bRet   =   FALSE;

        ptgGroups   =   (PTOKEN_GROUPS)InfoBuffer;

        for(i   =   0;   i   <   ptgGroups-> GroupCount;   i++)
        {
                if(EqualSid(psidAdministrators,ptgGroups-> Group[i].Sid))
                {
                        bRet   =   TRUE;
                        break;
                }
        }

        FreeSid(psidAdministrators);

cleanup:

        if(InfoBuffer)
delete[]   InfoBuffer;

        return   bRet;
}

原创粉丝点击