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 |