Найти текущих пользователей активной группы каталогов C++
Как мне узнать, к какой группе активных каталогов принадлежит текущий вошедший в систему пользователь? Я предполагаю, что это будет через 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 ответ
Решение
В вашем конкретном случае я думаю, что вы можете обойтись без каких-либо вызовов LDAP. Вот предложение:
- использование
GetCurrentProcessId
а такжеOpenProcess
чтобы справиться с текущим процессом - вызов
OpenProcessToken
на этой ручке, чтобы открыть токен доступа, связанный с текущим процессом - вызов
GetTokenInformation
на этом токене доступа, с классом информации токенаTokenGroups
- результирующий
TOKEN_GROUPS
структура содержит список с SID и атрибутами всех групп в токене доступа - вызов
LookupAccountSid
на SID каждой группы в списке, чтобы получить ее имя
MSDN должен предоставить более подробную информацию о вызовах, упомянутых выше.