Méthode IDirectoryObject ::GetObjectAttributes (iads.h)
La méthode IDirectoryObject ::GetObjectAttributes récupère un ou plusieurs attributs spécifiés de l’objet de service d’annuaire.
Syntaxe
HRESULT GetObjectAttributes(
[in] LPWSTR *pAttributeNames,
[in] DWORD dwNumberAttributes,
[out] PADS_ATTR_INFO *ppAttributeEntries,
[out] DWORD *pdwNumAttributesReturned
);
Paramètres
[in] pAttributeNames
Spécifie un tableau de noms des attributs demandés.
Pour demander tous les attributs de l’objet, définissez pAttributeNames sur NULL et définissez le paramètre dwNumberAttributes sur (DWORD)-1.
[in] dwNumberAttributes
Spécifie la taille du tableau pAttributeNames . Si -1, tous les attributs de l’objet sont demandés.
[out] ppAttributeEntries
Pointeur vers une variable qui reçoit un pointeur vers un tableau de structures ADS_ATTR_INFO qui contiennent les valeurs d’attribut demandées. Si aucun attribut n’a pu être obtenu à partir de l’objet de service d’annuaire, le pointeur retourné est NULL.
[out] pdwNumAttributesReturned
Pointeur vers une variable DWORD qui reçoit le nombre d’attributs récupérés dans le tableau ppAttributeEntries .
Valeur retournée
Cette méthode retourne les valeurs standard, ainsi que les éléments suivants :
Pour plus d’informations et d’autres valeurs de retour, consultez Codes d’erreur ADSI.
Remarques
ADSI alloue la mémoire pour le tableau de structures ADS_ATTR_INFO retournées dans le paramètre ppAttributeEntries . L’appelant doit appeler FreeADsMem pour libérer le tableau.
L’ordre des attributs retournés dans ppAttributeEntries n’est pas nécessairement le même que celui demandé dans pAttributeNames.
La méthode IDirectoryObject ::GetObjectAttributes tente de lire la définition de schéma des attributs demandés afin qu’elle puisse retourner les valeurs d’attribut au format approprié dans les structures ADSVALUE contenues dans les structures ADS_ATTR_INFO . Toutefois, GetObjectAttributes peut réussir même lorsque la définition de schéma n’est pas disponible, auquel cas le membre dwADsType de la structure ADS_ATTR_INFO retourne ADSTYPE_PROV_SPECIFIC et la valeur est retournée dans une structure de ADS_PROV_SPECIFIC . Lorsque vous traitez les résultats d’un appel GetObjectAttributes , vérifiez dwADsType pour vous assurer que les données ont été retournées dans le format attendu.
Exemples
L’exemple de code suivant montre comment la méthode IDirectoryObject ::GetObjectAttributes peut être utilisée.
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();
}
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows Vista |
Serveur minimal pris en charge | Windows Server 2008 |
Plateforme cible | Windows |
En-tête | iads.h |
DLL | Activeds.dll |