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

Weitere Informationen

ADSI-Fehlercodes

ADS_ATTR_INFO

FreeADsMem

IDirectoryObject