如何根据用户名获取其属于的用户组?比如用户名时Administrator,那么通过什么样的api可以知道此用户属于Administrator组?谢谢!

解决方案 »

  1.   

    看看注册表有没有?如果有就用RegOpenEx去打开然后读注册表!
      

  2.   

    很多应用程序在运行时都要求确定是否以管理优先级运行,例如,只有管理员才能使用的实用程序就是这样情况。实现这种功能的方法有很多,本文拟介绍一种方法,它通过获取进程TOKEN来实现。
    第一步:调用OpenProcessToken函数获取当前进程TOKEN的句柄,方法如下:HANDLE hAccessToken;
    OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY,&hAccessToken);当获得TOKEN句柄之后,我们还得获取这个TOKEN的分组信息:
    BYTE InfoBuffer[1024];
    DWORD dwInfoBufferSize;GetTokenInfomation(hAccessToken,
                       TokenGroups,
                       InfoBuffer,
                       1024,
                       &dwInfoBufferSize);第二步:为Local Admin账号获取安全标示符(SID),我们要利用这个账号在所有TOKEN分组中查找Local Admin SID(不要忘了调用FreeSid函数来释放内存)。
    PSID psidAdministrators;
    SID_IDENTIFIER_AUTHORITY siaNtAuthority = SECURITY_NT_AUTHORITY;
    AllocateAndInitializeSid( &siaNtAuthority,
                              2,
                              SECURITY_BUILTIN_DOMAIN_RID,
                              DOMAIN_ALIAS_RID_ADMINS,
                              0,0,0,0,0,0,
                              &psidAdministrators) 最后一步:在所有TOKEN分组中查找Local Admin SID:
    PTOKEN_GROUPS ptgGroups = (PTOKEN_GROUPS)InfoBuffer;for(UINT i = 0; i < ptgGroups->GroupCount; i ++)
    {
        if( EqualSid(psidAdministrators,ptgGroups->Groups[i].Sid) )
        {
            // 此进程有管理权限
            break;
        }
    }