Найти текущих пользователей активной группы каталогов C ++ - PullRequest
1 голос
/ 17 августа 2010

Как мне узнать, к какой группе активных каталогов принадлежит текущий вошедший в систему пользователь?Я предполагаю, что это будет через LDAP, но я не смог найти много о том, как получить эту конкретную информацию.

Я собрал некоторый код, но я не совсем уверен, что мне нужно делать дальше

    // 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;
}

1 Ответ

2 голосов
/ 18 августа 2010

В вашем конкретном случае я думаю, что вы можете обойтись без каких-либо вызовов LDAP.Вот предложение:

  • используйте GetCurrentProcessId и OpenProcess, чтобы получить дескриптор текущего процесса
  • , вызовите OpenProcessToken для этого дескриптора, чтобы открыть маркер доступа, связанный стекущий процесс
  • вызов GetTokenInformation для этого токена доступа с классом информации токена TokenGroups
  • результирующая структура TOKEN_GROUPS содержит список с идентификаторами безопасности и атрибутами всех группв токене доступа
  • вызовите LookupAccountSid на SID каждой группы в списке, чтобы получить ее имя

MSDN должен предоставить более подробную информацию о вызовах, упомянутых выше.

...