Método IADs::Get (iads.h)
El método IADs::Get recupera una propiedad de un nombre determinado de la memoria caché de propiedades. La propiedad puede tener un valor único o multivalor. El valor de propiedad se representa como una variante para una propiedad con un solo valor o una matriz variant (de VARIANT o bytes) para una propiedad que permite varios valores.
Sintaxis
HRESULT Get(
[in] BSTR bstrName,
[out] VARIANT *pvProp
);
Parámetros
[in] bstrName
Contiene un BSTR que especifica el nombre de la propiedad.
[out] pvProp
Puntero a un valor VARIANT que recibe el valor de la propiedad . Para una propiedad multivalor, pvProp es una matriz variant de VARIANT, a menos que la propiedad sea un tipo binario. En este último caso, pvProp es una matriz variant de bytes (VT_U1 o VT_ARRAY). Para la propiedad que hace referencia a un objeto, pvProp es un puntero VT_DISPATCH al objeto al que se hace referencia.
Valor devuelto
Este método admite valores devueltos estándar, así como los siguientes.
Para obtener más información, consulta Códigos de error adsi.
Comentarios
El método IADs::Get requiere que el autor de la llamada controle los valores de propiedad de un solo valor y multivalor de forma diferente. Por lo tanto, si sabe que la propiedad de interés es de un solo valor o multivalor, use el método IADs::Get para recuperar el valor de la propiedad. En el ejemplo de código siguiente se muestra cómo, como autor de la llamada, puede controlar las propiedades de un solo valor y multivalor al llamar a este método.
Cuando una propiedad no está inicializada, al llamar a este método se invoca una llamada implícita al método IADs::GetInfo . Esto carga desde el directorio subyacente los valores de las propiedades admitidas que no se han establecido en la memoria caché. Todas las llamadas posteriores a IADs::Get solo tratan los valores de propiedad en la memoria caché. Para obtener más información sobre el comportamiento de las llamadas implícitas y explícitas a IADs::GetInfo, vea IADs::GetInfo.
También puede usar IADs::GetEx para recuperar los valores de propiedad de la memoria caché de propiedades. Sin embargo, los valores se devuelven como una matriz variant de VARIANTs, independientemente de si tienen un valor único o multivalor. Es decir, ADSI intenta empaquetar los valores de propiedad devueltos en formatos de datos coherentes. Esto le ahorra, como autor de la llamada, el esfuerzo de validar los tipos de datos cuando no está seguro de que los datos devueltos tengan uno o varios valores.
Ejemplos
En el ejemplo de código siguiente se recupera el descriptor de seguridad de un objeto mediante 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
En el ejemplo de código siguiente se muestra cómo trabajar con valores de propiedad de datos binarios mediante IADs::Get e 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
En el ejemplo de código siguiente se muestra cómo recuperar valores de las propiedades opcionales de un objeto mediante 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>
En el ejemplo de código siguiente se leen atributos con uno y varios valores mediante 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();
}
Requisitos
Cliente mínimo compatible | Windows Vista |
Servidor mínimo compatible | Windows Server 2008 |
Plataforma de destino | Windows |
Encabezado | iads.h |
Archivo DLL | Activeds.dll |