IDirectoryObject::GetObjectAttributes-Methode (iads.h)
Die IDirectoryObject::GetObjectAttributes-Methode ruft mindestens ein angegebenes Attribut des Verzeichnisdienstobjekts ab.
Syntax
HRESULT GetObjectAttributes(
[in] LPWSTR *pAttributeNames,
[in] DWORD dwNumberAttributes,
[out] PADS_ATTR_INFO *ppAttributeEntries,
[out] DWORD *pdwNumAttributesReturned
);
Parameter
[in] pAttributeNames
Gibt ein Array von Namen der angeforderten Attribute an.
Um alle Attribute des Objekts anzufordern, legen Sie pAttributeNames auf NULL und den dwNumberAttributes-Parameter auf (DWORD)-1 fest.
[in] dwNumberAttributes
Gibt die Größe des pAttributeNames-Arrays an . Bei -1 werden alle Attribute des Objekts angefordert.
[out] ppAttributeEntries
Zeiger auf eine Variable, die einen Zeiger auf ein Array von ADS_ATTR_INFO Strukturen empfängt, die die angeforderten Attributwerte enthalten. Wenn keine Attribute aus dem Verzeichnisdienstobjekt abgerufen werden konnten, ist der zurückgegebene Zeiger NULL.
[out] pdwNumAttributesReturned
Zeiger auf eine DWORD-Variable , die die Anzahl der im ppAttributeEntries-Array abgerufenen Attribute empfängt.
Rückgabewert
Diese Methode gibt die Standardwerte sowie Folgendes zurück:
Weitere Informationen und andere Rückgabewerte finden Sie unter ADSI-Fehlercodes.
Hinweise
ADSI weist den Arbeitsspeicher für das Array von ADS_ATTR_INFO Strukturen zu , die im ppAttributeEntries-Parameter zurückgegeben werden. Der Aufrufer muss FreeADsMem aufrufen, um das Array frei zu geben.
Die Reihenfolge der in ppAttributeEntries zurückgegebenen Attribute entspricht nicht unbedingt der reihenfolge, die in pAttributeNames angefordert wird.
Die IDirectoryObject::GetObjectAttributes-Methode versucht, die Schemadefinition der angeforderten Attribute zu lesen, damit die Attributwerte in den ADSVALUE-Strukturen , die in den ADS_ATTR_INFO-Strukturen enthalten sind, im entsprechenden Format zurückgegeben werden können. GetObjectAttributes kann jedoch auch dann erfolgreich sein, wenn die Schemadefinition nicht verfügbar ist. In diesem Fall gibt der dwADsType-Member der ADS_ATTR_INFO-Struktur ADSTYPE_PROV_SPECIFIC zurück, und der Wert wird in einer ADS_PROV_SPECIFIC-Struktur zurückgegeben. Wenn Sie die Ergebnisse eines GetObjectAttributes-Aufrufs verarbeiten, überprüfen Sie dwADsType , um sicherzustellen, dass die Daten im erwarteten Format zurückgegeben wurden.
Beispiele
Das folgende Codebeispiel zeigt, wie die IDirectoryObject::GetObjectAttributes-Methode verwendet werden kann.
HRESULT hr;
IDirectoryObject *pDirObject = NULL;
hr = ADsGetObject(L"LDAP://CN=Jeff Smith,OU=Sales,DC=Fabrikam,DC=com",
IID_IDirectoryObject,
(void**) &pDirObject );
if ( SUCCEEDED(hr) )
{
ADS_ATTR_INFO *pAttrInfo=NULL;
DWORD dwReturn;
LPWSTR pAttrNames[]={L"givenName",L"sn", L"otherTelephone" };
DWORD dwNumAttr=sizeof(pAttrNames)/sizeof(LPWSTR);
//////////////////////////////////////////////////////
// Get attribute values requested.
// Be aware that the order is not necessarily the
// same as requested using pAttrNames.
//////////////////////////////////////////////////////
hr = pDirObject->GetObjectAttributes( pAttrNames,
dwNumAttr,
&pAttrInfo,
&dwReturn );
if ( SUCCEEDED(hr) )
{
for(DWORD idx = 0; idx < dwReturn; idx++ )
{
if ( _wcsicmp(pAttrInfo[idx].pszAttrName,L"givenName") == 0 )
{
switch (pAttrInfo[idx].dwADsType)
{
case ADSTYPE_CASE_IGNORE_STRING:
printf("First Name: %S\n", pAttrInfo[idx].pADsValues->CaseIgnoreString);
break;
case ADSTYPE_PROV_SPECIFIC:
printf("First Name: %S\n", pAttrInfo[idx].pADsValues->ProviderSpecific.lpValue);
break;
default:
printf("Invalid ADsType: %d\n", pAttrInfo[idx].dwADsType);
break;
}
}
else if ( _wcsicmp(pAttrInfo[idx].pszAttrName, L"sn") == 0 )
{
switch (pAttrInfo[idx].dwADsType)
{
case ADSTYPE_CASE_IGNORE_STRING:
printf("Last Name: %S\n", pAttrInfo[idx].pADsValues->CaseIgnoreString);
break;
case ADSTYPE_PROV_SPECIFIC:
printf("Last Name: %S\n", pAttrInfo[idx].pADsValues->ProviderSpecific.lpValue);
break;
default:
printf("Invalid ADsType: %d\n", pAttrInfo[idx].dwADsType);
break;
}
}
else if ( _wcsicmp(pAttrInfo[idx].pszAttrName, L"otherTelephone") == 0 )
{ // Print the multi-valued property, "Other Telephones".
switch (pAttrInfo[idx].dwADsType)
{
case ADSTYPE_CASE_IGNORE_STRING:
printf("Other Telephones:");
for (DWORD val=0; val < pAttrInfo[idx].dwNumValues; val++)
printf(" %S\n", pAttrInfo[idx].pADsValues[val].CaseIgnoreString);
break;
case ADSTYPE_PROV_SPECIFIC:
printf("Other Telephones:");
for (DWORD val=0; val < pAttrInfo[idx].dwNumValues; val++)
printf(" %S\n", pAttrInfo[idx].pADsValues[val].CaseIgnoreString);
break;
default:
printf("Other Telephones:");
for (DWORD val=0; val < pAttrInfo[idx].dwNumValues; val++)
printf(" %S\n", pAttrInfo[idx].pADsValues[val].CaseIgnoreString);
break;
}
}
}
/////////////////////////////////////////////////////////////
// Use FreeADsMem for all memory obtained from the ADSI call.
/////////////////////////////////////////////////////////////
FreeADsMem( pAttrInfo );
}
pDirObject->Release();
}
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows Vista |
Unterstützte Mindestversion (Server) | Windows Server 2008 |
Zielplattform | Windows |
Kopfzeile | iads.h |
DLL | Activeds.dll |