IADs::Get-Methode (iads.h)
Die IADs::Get-Methode ruft eine Eigenschaft eines angegebenen Namens aus dem Eigenschaftencache ab. Die Eigenschaft kann einwertig oder mehrwertig sein. Der Eigenschaftswert wird entweder als Variante für eine einwertige Eigenschaft oder als Variantarray (aus VARIANT oder Bytes) für eine Eigenschaft dargestellt, die mehrere Werte zulässt.
Syntax
HRESULT Get(
[in] BSTR bstrName,
[out] VARIANT *pvProp
);
Parameter
[in] bstrName
Enthält einen BSTR , der den Eigenschaftennamen angibt.
[out] pvProp
Zeiger auf einen VARIANT-Wert , der den Wert der -Eigenschaft empfängt. Bei einer mehrwertigen Eigenschaft ist pvProp ein Variant-Array von VARIANT, es sei denn, die Eigenschaft ist ein binärer Typ. In diesem letzteren Fall ist pvProp ein Variantenarray von Bytes (VT_U1 oder VT_ARRAY). Für die Eigenschaft, die auf ein Objekt verweist, ist pvProp ein VT_DISPATCH Zeiger auf das Objekt, auf das verwiesen wird.
Rückgabewert
Diese Methode unterstützt standardmäßige Rückgabewerte sowie folgendes.
Weitere Informationen finden Sie unter ADSI-Fehlercodes.
Hinweise
Die IADs::Get-Methode erfordert, dass der Aufrufer die einwertigen und mehrwertigen Eigenschaftswerte unterschiedlich behandelt. Wenn Sie also wissen, dass die eigenschaft von Interesse entweder ein- oder mehrwertig ist, verwenden Sie die IADs::Get-Methode , um den Eigenschaftswert abzurufen. Das folgende Codebeispiel zeigt, wie Sie als Aufrufer ein- und mehrwertige Eigenschaften beim Aufrufen dieser Methode verarbeiten können.
Wenn eine Eigenschaft nicht initialisiert wird, ruft der Aufruf dieser Methode einen impliziten Aufruf der IADs::GetInfo-Methode auf. Dadurch werden aus dem zugrunde liegenden Verzeichnis geladen, um die Werte der unterstützten Eigenschaften zu speichern, die nicht im Cache festgelegt wurden. Alle nachfolgenden Aufrufe von IADs::Get befassen sich nur mit Eigenschaftswerten im Cache. Weitere Informationen zum Verhalten impliziter und expliziter Aufrufe von IADs::GetInfo finden Sie unter IADs::GetInfo.
Sie können auch IADs::GetEx verwenden, um Eigenschaftswerte aus dem Eigenschaftencache abzurufen. Die Werte werden jedoch als Variantenarray von VARIANTs zurückgegeben, unabhängig davon, ob sie einwertig oder mehrwertig sind. Das heißt, ADSI versucht, die zurückgegebenen Eigenschaftswerte in konsistenten Datenformaten zu packen. Dadurch sparen Sie sich als Aufrufer den Aufwand, die Datentypen zu überprüfen, wenn Sie nicht sicher sind, dass die zurückgegebenen Daten einen oder mehrere Werte aufweisen.
Beispiele
Im folgenden Codebeispiel wird der Sicherheitsdeskriptor für ein Objekt mithilfe von IADs::Get abgerufen.
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
Das folgende Codebeispiel zeigt, wie Sie mit Eigenschaftswerten von Binärdaten mithilfe von IADs::Get und IADs::P ut arbeiten.
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
Im folgenden Codebeispiel wird gezeigt, wie Werte der optionalen Eigenschaften eines Objekts mithilfe von IADs::Get abgerufen werden.
<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>
Im folgenden Codebeispiel werden Attribute mit einzelnen und mehreren Werten mithilfe von IADs::Get gelesen.
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();
}
Anforderungen
Unterstützte Mindestversion (Client) | Windows Vista |
Unterstützte Mindestversion (Server) | Windows Server 2008 |
Zielplattform | Windows |
Kopfzeile | iads.h |
DLL | Activeds.dll |