如上

解决方案 »

  1.   

    nStatus = NetUserEnum(NULL,dwLevel,FILTER_NORMAL_ACCOUNT,(LPBYTE*)&pBuf,
                                 dwPrefMaxLen,&dwEntriesRead,&dwTotalEntries,&dwResumeHandle);
           if ((nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA))
           {
              if ((pTmpBuf = pBuf) != NULL)
              {
                  for (i = 0; (i < dwEntriesRead); i++)
      {
                    if (pTmpBuf == NULL)
                    {
                       printf("An access violation has occurred\n");
                       break;
                    }
                    wprintf(L"Name:\t\t %s\n", pTmpBuf->usri3_name);  
    switch(pTmpBuf->usri3_priv)
    {
    case USER_PRIV_GUEST:
    printf("%-10s\t","Guest");
    break;
    case USER_PRIV_USER:
    printf("%-10s\t","User");
    break;
    case USER_PRIV_ADMIN://管理员
    printf("%-10s\t","Administrator");
    break;
    default:
    printf("%-10s\t","");
    break;
    }
                    pTmpBuf++;
                    dwTotalCount++;
      }
              }
    再用GetUserName()取当前用户名,判断一下
      

  2.   

    Figure 3   Member of Administrator? 
     bool bIsAdmin = false;
     SID_IDENTIFIER_AUTHORITY ntauth = 
         SECURITY_NT_AUTHORITY;
     void* psidAdmin = 0;
     AllocateAndInitializeSid( &ntauth, 2,
         SECURITY_BUILTIN_DOMAIN_RID,
         DOMAIN_ALIAS_RID_ADMINS,
         0, 0, 0, 0, 0, 0, &psidAdmin );
     HANDLE htok = 0;
     OpenProcessToken( GetCurrentProcess(),
                       TOKEN_QUERY, &htok );
     DWORD cb = 0;
     GetTokenInformation( htok, TokenGroups,
                          0, 0, &cb );
     TOKEN_GROUPS* ptg = (TOKEN_GROUPS*) malloc(cb);
     GetTokenInformation( htok, TokenGroups,
                          ptg, cb, &cb );
     for ( DWORD i = 0; i < ptg->GroupCount; ++i )
       if ( EqualSid( psidAdmin, ptg->Groups[i].Sid ) )
         break;
     bIsAdmin = i != ptg->GroupCount;
     free( ptg );
     CloseHandle( htok );
     FreeSid( psidAdmin );