IADs::Get, méthode (iads.h)

La méthode IADs::Get récupère une propriété d’un nom donné à partir du cache de propriétés. La propriété peut être à valeur unique ou à valeurs multiples. La valeur de la propriété est représentée sous la forme d’une variante pour une propriété à valeur unique ou d’un tableau de variantes ( variant ou octets) pour une propriété qui autorise plusieurs valeurs.

Syntaxe

HRESULT Get(
  [in]  BSTR    bstrName,
  [out] VARIANT *pvProp
);

Paramètres

[in] bstrName

Contient un BSTR qui spécifie le nom de la propriété.

[out] pvProp

Pointeur vers un VARIANT qui reçoit la valeur de la propriété. Pour une propriété à valeurs multiples, pvProp est un tableau variant de VARIANT, sauf si la propriété est un type binaire. Dans ce dernier cas, pvProp est un tableau variant d’octets (VT_U1 ou VT_ARRAY). Pour la propriété qui fait référence à un objet, pvProp est un pointeur VT_DISPATCH vers l’objet auquel il est fait référence.

Valeur retournée

Cette méthode prend en charge les valeurs de retour standard, ainsi que les éléments suivants.

Pour plus d’informations, consultez Codes d’erreur ADSI.

Notes

La méthode IADs::Get nécessite que l’appelant gère différemment les valeurs de propriété à valeur unique et à valeurs multiples. Par conséquent, si vous savez que la propriété d’intérêt est à valeur unique ou à valeurs multiples, utilisez la méthode IADs::Get pour récupérer la valeur de la propriété. L’exemple de code suivant montre comment, en tant qu’appelant, vous pouvez gérer des propriétés à valeurs uniques et à valeurs multiples lors de l’appel de cette méthode.

Lorsqu’une propriété est non initialisée, l’appel de cette méthode appelle un appel implicite à la méthode IADs::GetInfo . Ce chargement à partir du répertoire sous-jacent stocke les valeurs des propriétés prises en charge qui n’ont pas été définies dans le cache. Tous les appels suivants à IADs::Get traitent uniquement des valeurs de propriété dans le cache. Pour plus d’informations sur le comportement des appels implicites et explicites aux IADs::GetInfo, consultez IADs::GetInfo.

Vous pouvez également utiliser IADs::GetEx pour récupérer les valeurs de propriété du cache de propriétés. Toutefois, les valeurs sont retournées sous la forme d’un tableau variant de VARIANTs, qu’elles soient à valeur unique ou à valeurs multiples. Autrement dit, ADSI tente d’empaqueter les valeurs de propriété retournées dans des formats de données cohérents. Cela vous évite, en tant qu’appelant, l’effort de validation des types de données lorsque vous ne savez pas que les données retournées ont une ou plusieurs valeurs.

Exemples

L’exemple de code suivant récupère le descripteur de sécurité d’un objet à l’aide de IADs::Get.

Dim x As IADs
Dim Desc As IADsSecurityDescriptor
On Error GoTo ErrTest:
 
Set x = GetObject("LDAP://CN=Administrator,CN=Users,DC=Fabrikam,DC=com")
 
' Single-valued properties.
Debug.Print "Home Phone Number is: " & x.Get("homePhone")
 
' Some property values represents other ADSI objects. 
' Consult your provider documentation.
Set Desc = x.Get("ntSecurityDescriptor")
 
' Multi-valued property, assuming that multiple values were
' assigned to the "otherHomePhone" properties. Caller must 
' enumerate all the available values.
Debug.Print "Other Phone Numbers are: "
otherNumbers = x.Get("otherHomePhone")
For Each homeNum In otherNumbers
  Debug.Print homeNum
Next
 
Exit Sub
 
ErrTest:
  Debug.Print Hex(Err.Number)
  Set x = Nothing
  Set Desc = Nothing

L’exemple de code suivant montre comment utiliser des valeurs de propriété de données binaires à l’aide de IADs::Get et IADs::P ut.

Dim oTarget As IADs
Dim Octet(5) As Byte
Dim MultiOctet(2) As Variant
Dim i As Integer, j As Integer

On Error GoTo Cleanup
 
' Set up MultiOctetString.
For i = 0 To 2
    For j = 0 To 5
        Octet(j) = CByte(i * j)
    Next j
    MultiOctet(i) = Octet
Next i
 
' Bind to the object and set MultiOctetString.
Set oTarget=GetObject("LDAP://CN=SomeUser,CN=Users,DC=Fabrikam, DC=COM")
oTarget.Put "multiOctetString", MultiOctet
oTarget.SetInfo
 
Dim GetOctet As Variant
Dim Temp As Variant
 
' Read back and print MultiOctetString.
GetOctet = oTarget.Get("multiOctetString")
For i = LBound(GetOctet) To UBound(GetOctet)
    Temp = GetOctet(i)
    For j = LBound(Temp) To UBound(Temp)
        Debug.Print Temp(j)
    Next j
    Debug.Print "----"
Next i

Exit Sub

Cleanup:
   MsgBox("An error has occurred. " & Err.Number)
   Set oTarget = Nothing

L’exemple de code suivant montre comment récupérer les valeurs des propriétés facultatives d’un objet à l’aide de IADs::Get.

<HTML>
<head><title></title></head>

<body>
<%
Dim x 
 
On error resume next
Set x = GetObject("WinNT://Fabrikam/Administrator")
Response.Write "Object Name: " & x.Name & "<br>"
Response.Write "Object Class: " & x.Class & "<br>"
 
' Get optional property values of this object.
Set cls = GetObject(x.Schema)

For Each op In cls.OptionalProperties
   v = obj.Get(op)
   if err.Number = 0 then
       Response.Write "Optional Property: " & op & "=" & v & "<br>"
   end if
Next
%>

</body>
</html>

L’exemple de code suivant lit les attributs avec des valeurs uniques et multiples à l’aide de IADs::Get.

HRESULT hr;
IADs *pUsr=NULL;
 
CoInitialize(NULL);
 
///////////////////////////////
// Bind to a directory object.
///////////////////////////////
hr = ADsGetObject(L"WinNT://Fabrikam/Administrator,user", IID_IADs, (void**) &pUsr );
if ( !SUCCEEDED(hr) ) { return hr; }
 
//////////////////////////////////
// Get a single-valued attribute.
//////////////////////////////////
VARIANT var;
VariantInit(&var);
 
hr = pUsr->Get(CComBSTR("FullName"), &var );
if ( SUCCEEDED(hr) )
{
    printf("FullName: %S\n", V_BSTR(&var) );
    VariantClear(&var);
}
 
if ( pUsr )
{
    pUsr->Release();
}
 
///////////////////////////////////////////////////////
// Get a multi-valued attribute from a service object.
///////////////////////////////////////////////////////
IADs *pSvc = NULL;
 
hr = ADsGetObject(L"WinNT://Fabrikam/Account/Browser,service", IID_IADs, (void**) &pSvc );
if ( !SUCCEEDED(hr) )
{
    return hr;
}
 
hr = pSvc->Get(CComBSTR("Dependencies"), &var );
if ( SUCCEEDED(hr) )
{
    LONG lstart, lend;
    SAFEARRAY *sa = V_ARRAY( &var );
    VARIANT varItem;
 
    // Get the lower and upper bound.
    hr = SafeArrayGetLBound( sa, 1, &lstart );
    hr = SafeArrayGetUBound( sa, 1, &lend );
 
    // Iterate and print the content.
    VariantInit(&varItem);
    printf("Getting service dependencies using IADs :\n");
    for ( long idx=lstart; idx <= lend; idx++ )
    {
        hr = SafeArrayGetElement( sa, &idx, &varItem );
        printf("%S ", V_BSTR(&varItem));
        VariantClear(&varItem);
    }
    printf("\n");
 
    VariantClear(&var);
}
 
// Cleanup.
if ( pSvc )
{
    pSvc->Release();
}

Configuration requise

   
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

IADs

IADs::GetEx

IADs::GetInfo

IADs::P ut

IADs::P utEx

Cache de propriétés