1

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

1 回答 1

2

在您的特定情况下,我认为您无需任何 LDAP 调用即可。这里有一个建议:

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

MSDN 应提供有关上述调用的更详细信息。

于 2010-08-18T11:54:13.483 回答