查找当前用户的活动目录组C ++

时间:2010-08-17 17:47:18

标签: c++ ldap activedirectorymembership

如何查询当前登录用户所属的活动目录组?我假设它将通过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 个答案:

答案 0 :(得分:2)

在您的特定情况下,我认为您可以不进行任何LDAP调用。这是一个建议:

  • 使用GetCurrentProcessIdOpenProcess来获取当前流程的句柄
  • 在该句柄上调用OpenProcessToken以打开与当前进程关联的访问令牌
  • 使用令牌信息类GetTokenInformation
  • 在该访问令牌上调用TokenGroups
  • 生成的TOKEN_GROUPS结构包含一个列表,其中包含访问令牌中所有组的SID和属性
  • 在列表中的每个组的SID上调用LookupAccountSid以获取其名称

MSDN应提供有关上述呼叫的更多详细信息。