查找当前用户活动目录组 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 调用即可。这是一个建议:
使用GetCurrentProcessId
和OpenProcess
获取当前进程的句柄
在该句柄上调用OpenProcessToken
以打开与当前进程关联的访问令牌
在该访问令牌上调用GetTokenInformation
,令牌信息类为TokenGroups
生成的TOKEN_GROUPS
结构包含一个列表,其中包含访问令牌中所有组的 SID 和属性
在列表中每个组的 SID 上调用 LookupAccountSid
以获取其名称
MSDN 应提供有关上述调用的更详细信息。
【讨论】:
我开始整理一些代码,但我不确定在最后一步使用 LookupAccountSid 需要做什么 假设调用GetTokenInformation
成功;您现在应该有一个指向TOKEN_GROUPS
结构ptokengroups
的指针。对于每个ptokengroups->GroupCount
组,请在ptokengroups->Groups[idx].Sid
上致电LookupAccountSid
。
我看到您已经编辑了问题并添加了使用 GetTokenInformation
和 TokenUser
而不是 TokenGroups
的代码,尽管您最初说您想要检索当前用户所属的组的。无论如何,给定代码,您现在可以通过调用 LookupAccountSid
来检索用户的名称和域,第一次使用 NULL 输出缓冲区检索其大小,然后使用有效的:LookupAccountSid(NULL, (pTokenUser->User).Sid, name, &namesize, domainname, &domainnamesize, &use)
,使用 SID_NAME_USE use = SidTypeUnknown
。对组进行类似的操作。以上是关于查找当前用户活动目录组 C++的主要内容,如果未能解决你的问题,请参考以下文章
powershell 从活动目录中获取Windows用户所属的广告组
powershell 使用PowerShell检查活动目录中组用户的帐户