2010-08-17 5 views
1

Comment procéder pour interroger le groupe de répertoires auquel appartient l'utilisateur actuellement connecté? Je suppose que ce sera à travers LDAP mais je n'ai pas pu trouver beaucoup sur la façon d'obtenir cette information particulière.Rechercher les utilisateurs actuels Groupe de répertoires actifs C++

J'ai mis en place un code, mais je ne suis pas tout à fait sûr ce que je dois faire ensuite

// Open the access token associated with the calling process. 
if (OpenProcessToken(GetCurrentProcess(), 
        TOKEN_QUERY, 
        &hToken) == FALSE) 
{ 
    dwErrorCode = GetLastError(); 
    wprintf(L"OpenProcessToken failed. GetLastError returned: %d\n", dwErrorCode); 
    return HRESULT_FROM_WIN32(dwErrorCode); 
} 

// Retrieve the token information in a TOKEN_USER structure. 
GetTokenInformation(hToken, 
        TokenUser,  // Request for a TOKEN_USER structure. 
        NULL, 
        0, 
        &dwBufferSize); 

pTokenUser = (PTOKEN_USER) new BYTE[dwBufferSize]; 
memset(pTokenUser, 0, dwBufferSize); 
if (GetTokenInformation(hToken, 
         TokenUser, 
         pTokenUser, 
         dwBufferSize, 
         &dwBufferSize)) 
{ 
    CloseHandle(hToken); 
} 
else 
{ 
    dwErrorCode = GetLastError(); 
    wprintf(L"GetTokenInformation failed. GetLastError returned: %d\n", dwErrorCode); 
    return HRESULT_FROM_WIN32(dwErrorCode); 
} 

if (IsValidSid(pTokenUser->User.Sid) == FALSE) 
{ 
    wprintf(L"The owner SID is invalid.\n"); 
    delete [] pTokenUser; 
} 

Répondre

2

Dans votre cas particulier, je pense que vous pouvez le faire sans aucun appel LDAP. Voici une suggestion:

  • utilisation GetCurrentProcessId et OpenProcess pour obtenir une poignée au processus actuel
  • appel OpenProcessToken sur cette poignée pour ouvrir le jeton d'accès associé au processus actuel
  • appel GetTokenInformation sur ce jeton d'accès, avec une classe d'information de jeton TokenGroups
  • la structure TOKEN_GROUPS résultant contient une liste des identificateurs de sécurité et des attributs de tous les groupes dans le jeton d'accès
  • c tous LookupAccountSid sur le SID de chaque groupe dans la liste pour obtenir son nom

MSDN devrait fournir des informations plus détaillées sur les appels mentionnés ci-dessus.

+0

J'ai commencé à assembler du code mais je ne suis pas sûr de ce que je devrais faire à la dernière étape en utilisant LookupAccountSid – thecaptain0220

+0

Supposons que l'appel de 'GetTokenInformation' a réussi; vous devriez maintenant avoir un pointeur vers une structure 'TOKEN_GROUPS',' ptokengroups'. Pour chacun des groupes 'ptokengroups-> GroupCount', appelez' LookupAccountSid' sur 'ptokengroups-> Groups [idx] .Sid'. –

+0

Je vois que vous avez édité la question et ajouté du code qui utilise 'GetTokenInformation' avec' TokenUser' au lieu de 'TokenGroups', bien que vous ayez dit à l'origine que vous vouliez récupérer les groupes dont l'utilisateur actuel est membre. Quoi qu'il en soit, étant donné le code, vous pouvez maintenant récupérer le nom et le domaine de l'utilisateur en appelant 'LookupAccountSid', la première fois avec des tampons de sortie NULL pour récupérer leurs tailles, puis avec ceux valides:' LookupAccountSid (NULL, (pTokenUser-> Utilisateur) .Sid, name, & namesize, domainname, & domainnamesize, & use), avec 'SID_NAME_USE use = SidTypeUnknown'. Procéder de même pour les groupes. –

Questions connexes