如题,如何用VC判断当前系统用户的权限??
望高手指教!!
谢谢!!

解决方案 »

  1.   

    BOOL 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->Groups[i].Sid))
            {
                bRet = TRUE;
                break;
            }
        }

        FreeSid(psidAdministrators);

    cleanup:

        if(InfoBuffer)
    delete[] InfoBuffer;

        return bRet;
    }
      

  2.   

    http://support.microsoft.com/kb/118626
      

  3.   

    HANDLE   hToken   =   NULL;   
      OpenProcessToken(GetCurrentProcess(),   TOKEN_QUERY,   &hToken);   
        
      DWORD   dwReturned   =   0;   
      GetTokenInformation(hToken,   TokenOwner,   NULL,   0,   &dwReturned);   
        
      LPVOID   pvOwner   =   new   BYTE[dwReturned];   
      GetTokenInformation(hToken,   TokenOwner,   pvOwner,   dwReturned,   &dwReturned);   
        
      PTOKEN_OWNER   pTokenOwner   =   (PTOKEN_OWNER)pvOwner;   
        
      SID_NAME_USE   snu;   
        
      TCHAR   tszName[256],   tszDomain[256];   
      DWORD   cbName   =   256,   cbDomain   =   256;   
        
      LookupAccountSid(NULL/*   Local   system   */,     
              pTokenOwner->Owner,   tszName,   &cbName,   tszDomain,   &cbDomain,   &snu))   
        
      cout   <<   _T("User   =   ")   <<   tszName   <<   endl;   
      cout   <<   _T("Domain   =   ")   <<   tszDomain   <<   endl;   
        
      delete[]   pvOwner;
      

  4.   

    HANDLE   hToken   =   NULL;   
      OpenProcessToken(GetCurrentProcess(),   TOKEN_QUERY,   &hToken);   
        
      DWORD   dwReturned   =   0;   
      GetTokenInformation(hToken,   TokenGroups,   NULL,   0,   &dwReturned);   
        
      LPVOID   pvGroups   =   new   BYTE[dwReturned];   
        
      GetTokenInformation(hToken,   TokenGroups,   pvGroups,   dwReturned,   &dwReturned);   
        
      PTOKEN_GROUPS   pTokenGroups   =   (PTOKEN_GROUPS)pvGroups;   
        
      PSID   pSIDAdmin   =   NULL;   
        
      SID_IDENTIFIER_AUTHORITY   SIDAuth   =   SECURITY_NT_AUTHORITY;   
      AllocateAndInitializeSid(&SIDAuth,   2,   SECURITY_BUILTIN_DOMAIN_RID,     
              DOMAIN_ALIAS_RID_ADMINS,   0,   0,   0,   0,   0,   0,   &pSIDAdmin);   
        
      SID_NAME_USE   snu;   
        
      TCHAR   tszName[256],   tszDomain[256];   
      DWORD   cbName   =   256,   cbDomain   =   256;   
        
      for   (int   i   =   0;   i   <   pTokenGroups->GroupCount;   i   ++)   
      {   
              LookupAccountSid(NULL/*   Local   system   */,     
                      pTokenGroups->Groups[i].Sid,   tszName,   &cbName,   tszDomain,   &cbDomain,   &snu);   
        
              if   (EqualSid(pSIDAdmin,   pTokenGroups->Groups[i].Sid))   
                      cout   <<   "   Administrators:"   <<   endl;   
        
              cout   <<   _T("Group   =   ")   <<   tszName   <<   endl;   
              cout   <<   _T("Domain   =   ")   <<   tszDomain   <<   endl;   
      }   
        
      FreeSid(pSIDAdmin);   
      delete[]   pvGroups;
      

  5.   

    http://topic.csdn.net/t/20030408/10/1632359.html