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 |
Voir aussi
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour