我無法獲取 Win32 ADSI c GetInfoEx API 來檢索 AD 用戶的郵件屬性。Get 呼叫改為回傳 hr 0x8000500D (E_ADS_PROPERTY_NOT_FOUND)。關于如何獲取獲取郵件屬性的任何想法?這是我的代碼。
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();
}
uj5u.com熱心網友回復:
使用 WinNT 提供程式時該mail屬性不可用:不支持的 IADsUser 屬性
您必須使用 LDAP。
如果您擁有該distinguishedName帳戶,則可以使用該帳戶:
hr = ADsGetObject(L"LDAP://CN=someuser,OU=Users,DC=example,DC=com", IID_IADs, (void**)&pUsr);
如果您只有域和用戶名,那么您可以使用LDAP://adomainname過濾器在域中搜索用戶名:
(&(objectClass=user)(objectCategory=person)(sAMAccountName=ausername))
或者,您可以使用IADsNameTranslate將域\用戶名 ( ADS_NAME_TYPE_NT4) 轉換為可分辨名稱 ( ADS_NAME_TYPE_1779)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/483258.html
