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

Posted

技术标签:

【中文标题】查找当前用户活动目录组 C++【英文标题】:Find current users active directory group C++ 【发布时间】:2010-08-17 17:47:18 【问题描述】:

如何查询当前登录用户所属的活动目录组?我假设它将通过 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 调用即可。这是一个建议:

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

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

【讨论】:

我开始整理一些代码,但我不确定在最后一步使用 LookupAccountSid 需要做什么 假设调用GetTokenInformation成功;您现在应该有一个指向TOKEN_GROUPS 结构ptokengroups 的指针。对于每个ptokengroups->GroupCount 组,请在ptokengroups->Groups[idx].Sid 上致电LookupAccountSid 我看到您已经编辑了问题并添加了使用 GetTokenInformationTokenUser 而不是 TokenGroups 的代码,尽管您最初说您想要检索当前用户所属的组的。无论如何,给定代码,您现在可以通过调用 LookupAccountSid 来检索用户的名称和域,第一次使用 NULL 输出缓冲区检索其大小,然后使用有效的:LookupAccountSid(NULL, (pTokenUser->User).Sid, name, &namesize, domainname, &domainnamesize, &use),使用 SID_NAME_USE use = SidTypeUnknown。对组进行类似的操作。

以上是关于查找当前用户活动目录组 C++的主要内容,如果未能解决你的问题,请参考以下文章

powershell 从活动目录中获取Windows用户所属的广告组

powershell 使用PowerShell检查活动目录中组用户的帐户

有没有办法使用ansible将活动目录中的用户分配给多个组?

活动目录的综合应用

活动目录 powershell 从组中 添加删除 用户

活动目录(Active Directory)的主要功能