首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ADSI GetInfoEx不检索邮件属性

ADSI GetInfoEx不检索邮件属性
EN

Stack Overflow用户
提问于 2022-05-30 15:25:55
回答 1查看 77关注 0票数 0

我无法获得Win32 ADSI c++ GetInfoEx API来检索AD用户的邮件属性。Get调用返回hr 0x8000500D (E_ADS_PROPERTY_NOT_FOUND)。对如何获得get mail属性有什么想法吗?这是我的密码。

代码语言:javascript
复制
HRESULT hr = CoInitialize(NULL);
if (hr == S_OK || hr == S_FALSE)
{
    IADs *pUsr = NULL;
    hr = ADsGetObject(L"WinNT://adomainname/ausername,user", IID_IADs, (void**)&pUsr);
    if (SUCCEEDED(hr))
    {
        VARIANT var;
        VariantInit(&var);

        LPWSTR pszAttrs[] = { L"mail" };
        DWORD dwNumber = sizeof(pszAttrs) / sizeof(LPWSTR);
        HRESULT hrAry = ADsBuildVarArrayStr(pszAttrs, dwNumber, &var);
        hr = pUsr->GetInfoEx(var, 0);
        VariantClear(&var);

        if (SUCCEEDED(hrAry) && SUCCEEDED(hr))
        {
            hr = pUsr->Get(CComBSTR("mail"), &var);
            if (SUCCEEDED(hr))
            {
                printf("mail: %S\n", V_BSTR(&var));
                VariantClear(&var);
            }
        }
        if (pUsr)
            pUsr->Release();
    }
    CoUninitialize();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-30 15:48:02

当使用mail提供程序:不支持的IADsUser性质时,WinNT属性不可用

您必须使用LDAP。

如果您拥有该帐户的distinguishedName,您可以使用:

代码语言:javascript
复制
hr = ADsGetObject(L"LDAP://CN=someuser,OU=Users,DC=example,DC=com", IID_IADs, (void**)&pUsr);

如果您拥有的只有域和用户名,那么您可以使用LDAP://adomainname和搜索域对用户名进行筛选:

代码语言:javascript
复制
(&(objectClass=user)(objectCategory=person)(sAMAccountName=ausername))

也可以使用IADsNameTranslate将域\用户名(ADS_NAME_TYPE_NT4)转换为可分辨的名称(ADS_NAME_TYPE_1779)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72436671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档