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 |