如何查询当前登录用户所属的活动目录组?我假设它将通过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;
}
答案 0 :(得分:2)
在您的特定情况下,我认为您可以不进行任何LDAP调用。这是一个建议:
GetCurrentProcessId
和OpenProcess
来获取当前流程的句柄OpenProcessToken
以打开与当前进程关联的访问令牌GetTokenInformation
TokenGroups
TOKEN_GROUPS
结构包含一个列表,其中包含访问令牌中所有组的SID和属性LookupAccountSid
以获取其名称MSDN应提供有关上述呼叫的更多详细信息。