Método IDirectoryObject::GetObjectAttributes (iads.h)

O método IDirectoryObject::GetObjectAttributes recupera um ou mais atributos especificados do objeto de serviço de diretório.

Sintaxe

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

Parâmetros

[in] pAttributeNames

Especifica uma matriz de nomes dos atributos solicitados.

Para solicitar todos os atributos do objeto, defina pAttributeNames como NULL e defina o parâmetro dwNumberAttributes como (DWORD)-1.

[in] dwNumberAttributes

Especifica o tamanho da matriz pAttributeNames . Se -1, todos os atributos do objeto serão solicitados.

[out] ppAttributeEntries

Ponteiro para uma variável que recebe um ponteiro para uma matriz de estruturas de ADS_ATTR_INFO que contêm os valores de atributo solicitados. Se nenhum atributo puder ser obtido do objeto de serviço de diretório, o ponteiro retornado será NULL.

[out] pdwNumAttributesReturned

Ponteiro para uma variável DWORD que recebe o número de atributos recuperados na matriz ppAttributeEntries .

Retornar valor

Esse método retorna os valores padrão, bem como o seguinte:

Para obter mais informações e outros valores retornados, consulte Códigos de erro ADSI.

Comentários

ADSI aloca a memória para a matriz de ADS_ATTR_INFO estruturas retornadas no parâmetro ppAttributeEntries . O chamador deve chamar FreeADsMem para liberar a matriz.

A ordem dos atributos retornados em ppAttributeEntries não é necessariamente a mesma solicitada em pAttributeNames.

O método IDirectoryObject::GetObjectAttributes tenta ler a definição de esquema dos atributos solicitados para que ele possa retornar os valores de atributo no formato apropriado nas estruturas ADSVALUE contidas nas estruturas ADS_ATTR_INFO . No entanto, GetObjectAttributes pode ter êxito mesmo quando a definição de esquema não está disponível, nesse caso, o membro dwADsType da estrutura ADS_ATTR_INFO retorna ADSTYPE_PROV_SPECIFIC e o valor é retornado em uma estrutura ADS_PROV_SPECIFIC . Ao processar os resultados de uma chamada GetObjectAttributes , verifique dwADsType para garantir que os dados foram retornados no formato esperado.

Exemplos

O exemplo de código a seguir mostra como o método IDirectoryObject::GetObjectAttributes pode ser usado.

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

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows Vista
Servidor mínimo com suporte Windows Server 2008
Plataforma de Destino Windows
Cabeçalho iads.h
DLL Activeds.dll

Confira também

Códigos de erro ADSI

ADS_ATTR_INFO

FreeADsMem

IDirectoryObject