c++ - ActiveDirectory/C++:如何将 Guid 转换为用户名?
问题描述
标题中的问题。我有一个用户的 Guid,并且想从 Active Directory 中获取用户名。我一直在谷歌搜索并查看Microsoft 的示例,但无法使其正常工作。我得到的每一个谷歌点击都展示了如何在 C# 中做到这一点,而我需要它在 C++ 中。有任何想法吗?最好我只想从 AD 获取用户名,但也感谢任何使示例正常工作的建议。
在我链接到的任何 dll 中都找不到IID_IDirectorySearch
外部符号。IID_IADs
更新:感谢 Gabriels 的回答,我现在可以获得给定的名称。但我仍然找不到 UserPrincipalName//logonName/sAMAccountName。
// Using this code to get the user object:
hr = ADsGetObject(L"LDAP://<GUID=XXXXXXXX-XX...>",
IID_IADsUser,
(void**)&pADsUser);
// Then trying different ways of getting the logon name:
pADsUser->Get(BSTR("sAMAccountName"), &var);
pADsUser->get_Name(&sbstr);
我错过了什么?
更新2。这是我的代码。
IADsUser* pADsUser = NULL;
BSTR sbstr;
HRESULT hr = CoInitialize(NULL);
if (hr != S_OK) { return; }
hr = ADsGetObject(L"LDAP://<GUID=XXX-YYY>",
IID_IADsUser,
(void**)&pADsUser);
if (hr != S_OK) { return; }
// This works
if (S_OK == pADsUser->get_FullName(&sbstr)) {
printf("Full Name: %S\n", sbstr);
}
// This doesn't. Get returns 0x8000500d
VARIANT var;
VariantInit(&var);
hr = pADsUser->Get(BSTR("sAMAccountName"), &var);
if (SUCCEEDED(hr))
{
printf("FullName: %S\n", V_BSTR(&var));
VariantClear(&var);
}
pADsUser->Release();
CoUninitialize();
解决方案
您包含的那个链接是关于执行搜索的。但如果您有 GUID,则无需搜索。您可以使用以下格式的 LDAP 路径使用 GUID 直接绑定到对象:
LDAP://servername/<GUID=XXXXX>
servername
如果您正在运行的计算机与您正在寻找的帐户加入相同或受信任的域,您可以排除这种情况。
更多详细信息:使用 objectGUID 绑定到对象
绑定后,然后您阅读sAMAccountName
以获取用户名。
至于链接,您需要包含activeds.h
并链接到ActiveDS.lib
and ADSIid.lib
(两者都在 Windows SDK 中找到)。此处有更多详细信息(这是一篇旧文章,但仍然相关):为 ADSI 开发设置 Visual C++ 6.0
的文档中IADs::Get
有示例代码,它向您展示了如何获取单值和多值属性。像这样的东西应该适用于sAMAccountName
:
VARIANT var;
VariantInit(&var);
hr = pUsr->Get(CComBSTR("sAMAccountName"), &var );
if ( SUCCEEDED(hr) )
{
printf("User name: %S\n", V_BSTR(&var) );
VariantClear(&var);
}
推荐阅读
- php - pdf到php中的字节数组转换
- c++11 - ld:未找到体系结构 x86_64 的符号 clang:错误:链接器命令失败,退出代码为 1
- angular - 通过代理配置从 Electron-Angular 项目调用 API
- python - 为什么 reshape 对 Transpose 的工作方式不同并返回一个新的 nd 数组?
- android - Android的FFmpeg GL转换命令
- ios - 是否可以在文本字段中显示之前修改自动填充字符串?
- ethereum - 如何使用 web3 解码日志并取回事件?
- python - 如何使用 alpha 通道为 png 图像着色?
- java - 无法使用 gson 和改造从对象读取数据
- entity-framework - 实体框架更新种子数据——数据运动迁移