Metodo IDirectoryObject::GetObjectAttributes (iads.h)

Il metodo IDirectoryObject::GetObjectAttributes recupera uno o più attributi specificati dell'oggetto servizio directory.

Sintassi

HRESULT GetObjectAttributes(
  [in]  LPWSTR         *pAttributeNames,
  [in]  DWORD          dwNumberAttributes,
  [out] PADS_ATTR_INFO *ppAttributeEntries,
  [out] DWORD          *pdwNumAttributesReturned
);

Parametri

[in] pAttributeNames

Specifica una matrice di nomi degli attributi richiesti.

Per richiedere tutti gli attributi dell'oggetto, impostare pAttributeNames su NULL e impostare il parametro dwNumberAttributes su (DWORD)-1.

[in] dwNumberAttributes

Specifica le dimensioni della matrice pAttributeNames . Se -1, vengono richiesti tutti gli attributi dell'oggetto.

[out] ppAttributeEntries

Puntatore a una variabile che riceve un puntatore a una matrice di strutture ADS_ATTR_INFO che contengono i valori di attributo richiesti. Se non è possibile ottenere attributi dall'oggetto servizio directory, il puntatore restituito è NULL.

[out] pdwNumAttributesReturned

Puntatore a una variabile DWORD che riceve il numero di attributi recuperati nella matrice ppAttributeEntries .

Valore restituito

Questo metodo restituisce i valori standard, nonché i seguenti:

Per altre informazioni e altri valori restituiti, vedere Codici di errore ADSI.

Commenti

ADSI alloca la memoria per la matrice di strutture ADS_ATTR_INFO restituite nel parametro ppAttributeEntries . Il chiamante deve chiamare FreeADsMem per liberare la matrice.

L'ordine degli attributi restituiti in ppAttributeEntries non è necessariamente uguale a quello richiesto in pAttributeNames.

Il metodo IDirectoryObject::GetObjectAttributes tenta di leggere la definizione dello schema degli attributi richiesti in modo che possa restituire i valori dell'attributo nel formato appropriato nelle strutture ADSVALUE contenute nelle strutture ADS_ATTR_INFO . Tuttavia, GetObjectAttributes può avere esito positivo anche quando la definizione dello schema non è disponibile, nel qual caso il membro dwADsType della struttura ADS_ATTR_INFO restituisce ADSTYPE_PROV_SPECIFIC e il valore viene restituito in una struttura ADS_PROV_SPECIFIC . Quando si elaborano i risultati di una chiamata GetObjectAttributes , verificare dwADsType per assicurarsi che i dati siano stati restituiti nel formato previsto.

Esempio

Nell'esempio di codice seguente viene illustrato come usare il metodo IDirectoryObject::GetObjectAttributes .

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();
}

Requisiti

Requisito Valore
Client minimo supportato Windows Vista
Server minimo supportato Windows Server 2008
Piattaforma di destinazione Windows
Intestazione iads.h
DLL Activeds.dll

Vedi anche

Codici di errore ADSI

ADS_ATTR_INFO

FreeADsMem

IDirectoryObject