2010-05-20 23 views

Répondre

7

WMI a une énumération Win32_UserAccount, mais l'énumération semble produire la même liste que NetEnumUsers, qui produit seulement (plus ou moins) des comptes "normaux", pas les principes de sécurité intégrés comme "Service local" et "Service réseau".

Vous pouvez récupérer tout avec NetLocalGroupEnum et NetLocalGroupGetMembers, mais vous devrez le faire à partir de quelque chose qui vous permet de travailler directement avec l'API Win32, pas (au moins AFAIK) via WMI. Dans le cas où cela est toujours utile, voici un exemple de code qui répertorie les groupes et les membres:

#define UNICODE 
#include <windows.h> 
#include <lmaccess.h> 
#include <lmapibuf.h> 

#include <iostream> 

int main() { 

    LOCALGROUP_INFO_0 *l_info; 
    DWORD read; 
    DWORD total; 

    NetLocalGroupEnum(NULL, 
        0, 
        (unsigned char **)&l_info, 
        MAX_PREFERRED_LENGTH, 
        &read, 
        &total, 
        NULL); 

    std::wcout << L"Local Groups\n"; 

    for (int i=0; i<read; i++) { 
     std::wcout << l_info[i].lgrpi0_name << std::endl; 

     LOCALGROUP_MEMBERS_INFO_1 *members; 
     DWORD entries, total_entries; 

     NetLocalGroupGetMembers(NULL, 
           l_info[i].lgrpi0_name, 
           1, 
           reinterpret_cast<BYTE **>(&members), 
           MAX_PREFERRED_LENGTH, 
           &entries, 
           &total_entries, 
           NULL); 

     for (int mem_num = 0; mem_num<entries; mem_num++) 
      std::wcout << L"\t" << members[mem_num].lgrmi1_name << L"\n"; 
     NetApiBufferFree(members); 
    } 


    NetApiBufferFree(l_info); 

    GROUP_INFO_0 *g_info; 

    NetGroupEnum(NULL, 
       0, 
       (unsigned char **)&g_info, 
       MAX_PREFERRED_LENGTH, 
       &read, 
       &total, 
       NULL); 

    std::wcout << L"\nGlobal Groups\n"; 

    for (i=0; i<read; i++) 
     std::wcout << g_info[i].grpi0_name << std::endl; 

    NetApiBufferFree(g_info); 
    return 0; 
} 
+1

+1. Cela mérite au moins un upvote. – David

+0

Lorsqu'un utilisateur ne fait partie d'aucun groupe, l'API ne fonctionne pas. –

+0

L'exemple de code a été extrêmement utile, merci pour cet effort supplémentaire! –