IADs::GetInfo-Methode (iads.h)

Die IADs::GetInfo-Methode lädt aus dem zugrunde liegenden Verzeichnisspeicher in die Eigenschaftscachewerte der unterstützten Eigenschaften dieses ADSI-Objekts.

Syntax

HRESULT GetInfo();

Rückgabewert

Diese Methode unterstützt die standardmäßigen Rückgabewerte sowie folgendes.

Weitere Informationen finden Sie unter ADSI-Fehlercodes.

Hinweise

Die IADs::GetInfo-Funktion wird aufgerufen, um den Eigenschaftencache zu initialisieren oder zu aktualisieren. Dies ähnelt dem Abrufen dieser Eigenschaftswerte unterstützter Eigenschaften aus dem zugrunde liegenden Verzeichnisspeicher.

Ein nicht initialisierter Eigenschaftencache ist nicht notwendigerweise leer. Rufen Sie IADs::P ut oder IADs::P utEx auf, um einen Wert im Eigenschaftencache für jede unterstützte Eigenschaft zu platzieren, und der Cache bleibt nicht initialisiert.

Bei einem expliziten Aufruf von IADs::GetInfo wird der gesamte Eigenschaftencache geladen oder neu geladen, wodurch alle zwischengespeicherten Eigenschaftswerte überschrieben werden. Ein impliziter Aufruf lädt jedoch nur die Eigenschaften, die nicht im Cache festgelegt sind. Rufen Sie IADs::GetInfo immer explizit auf, um die aktuellen Eigenschaftswerte des ADSI-Objekts abzurufen.

Da ein expliziter Aufruf von IADs::GetInfo alle Werte im Eigenschaftencache überschreibt, gehen alle änderungen am Cache verloren, wenn IADs::SetInfo nicht vor IADs::GetInfo aufgerufen wurde.

Für ein ADSI-Containerobjekt speichert IADs::GetInfo nur die Eigenschaftswerte des Containers, aber nicht die der untergeordneten Objekte zwischen.

Es ist wichtig, die Unterschiede zwischen den Methoden IADs::Get und IADs::GetInfo hervorzuheben. Erstere gibt Werte einer bestimmten Eigenschaft aus dem Eigenschaftencache zurück, während letztere alle unterstützten Eigenschaftswerte aus dem zugrunde liegenden Verzeichnisspeicher in den Eigenschaftencache lädt.

Im folgenden Codebeispiel werden die Unterschiede zwischen den Methoden IADs::Get und IADs::GetInfo veranschaulicht.

Set x = GetObject("LDAP://CN=Administrator,CN=Users,DC=Fabrikam,DC=com")
                                     ' The first IADs::Get calls
                                     ' GetInfo implicitly.
Debug.Print x.Get("homePhone")       ' Assume value is '999-9999'. 
x.Put "homePhone", "868-4449"        ' Put with no commit(SetInfo)
Debug.Print x.Get("homePhone")       ' Value='868-4449' from the cache.
x.GetInfo                            ' Refresh the cache, get the data 
                                     ' from the directory.
Debug.Print x.Get("homePhone")       ' Value will be '999-9999'.

Um die Leistung zu erhöhen, rufen Sie explizit IADs::GetInfoEx auf, um bestimmte Eigenschaften zu aktualisieren. Außerdem muss IADs::GetInfoEx anstelle von IADs::GetInfo aufgerufen werden, wenn auf die operativen Eigenschaftswerte des Objekts zugegriffen werden muss. Diese Funktion überschreibt alle zuvor zwischengespeicherten Werte der angegebenen Eigenschaften.

Beispiele

Im folgenden Codebeispiel wird ein Vom WinNT-Anbieter bereitgestelltes Computerobjekt verwendet. Zu den unterstützten Eigenschaften gehören Owner ("Owner"), OperatingSystem ("Windows NT"), OperatingSystemVersion ("4.0"), Division ("Fabrikam"), ProcessorCount ("Uniprococessor Free"), Processor ("x86 Family 6 Model 5 Stepping 1"). Die Standardwerte werden in Klammern angezeigt.

Dim pList As IADsPropertyList
Dim pEntry As IADsPropertyEntry
Dim pValue As IADsPropertyValue

On Error GoTo Cleanup
 
Set pList = GetObject("WinNT://localhost,computer")
 
' pList now represents an uninitialized empty property cache.
pList.Put "Owner", "JeffSmith"  ' Property cache remains uninitialized,
                               ' but with one property value.
count = pList.PropertyCount  ' count = 1.
MsgBox "Number of property found in the property cache: " & count
 
v = pList.Get("Division")   ' pList.GetInfo is called implicitly
ShowPropertyCache           ' This will display "JeffSmith" for Owner,
                            ' "Fabrikam" for Division, "Windows NT" for
                            ' OperatingSystem, and so on.
 
pList.GetInfo                ' Refreshes the entire cache, overwriting 
                             ' "JeffSmith" for the Owner property.
ShowPropertyCache            ' This will display "Owner" for Owner,
                             ' "Fabrikam" for Division, "Windows NT" for
                             ' OperatingSystem, and so on.

Cleanup:
    If (Err.Number<>0) Then
        MsgBox("An error has occurred. " & Err.Number)
    End If
    Set pList = Nothing
    Set pEntry = Nothing
    Set pValue = Nothing

 
Private Sub ShowPropertyCache()
    For I = 0 To pList.PropertyCount-1
       Set pEntry = pList.Item(I)
       Debug.Print pEntry.Name
       For Each v In pEntry.Values
           Set pValue = v
           Debug.Print "   " & pvalue.CaseIgnoreString
       Next
    Next
End Sub

Das folgende Codebeispiel ist ein clientseitiges Skript, das die Auswirkungen der IADs::GetInfo-Methode veranschaulicht. Zu den unterstützten Eigenschaften gehören Owner ("Owner"), OperatingSystem ("Windows NT"), OperatingSystemVersion ("4.0"), Division ("Fabrikam"), ProcessorCount ("Uniprococessor Free"), Processor ("x86 Family 6 Model 5 Stepping 1"). Die Standardwerte werden in Klammern angezeigt.

<html>
<body>
 <table>
    <tr>
       <td>Owner:</td>
       <td><input type=text name=txtOwner></td>
    </tr>
    <tr>
       <td>Operating System:</td>
       <td><input type=text name=txtOS></td>
    </tr>
    <tr>
       <td>Operating System Version:</td>
       <td><input type=text name=txtOSV></td>
    </tr>
    <tr>
       <td>Division:</td>
       <td><input type=text name=txtDiv></td>
    </tr>
 </table>

 <input type=button onClick = "showGetInfo()">
</body>

<script language="vbscript">
Dim pList 

sub showGetInfo()
  Set oFac = CreateObject("ADsFactory")
  path = "WinNT://Fabrikam"
  ADS_SECURE_AUTH = 1
  On Error Resume Next

' Browser security requires enabled/Prompt for "Initialize and 
' script ActiveX Controls not marked as safe"
  Set pList=oFac.OpenDSObject(path,vbNullString,vbNullString,ADS_SECURE_AUTH)
   
  ' pList now represents an uninitialized empty property cache
  pList.Put "Owner" "JeffSmith"  ' Property cache remain uninitialized
                                 ' but with one property value.
   
  v = pList.Get("Division")   ' pList.GetInfo is called implicitly
  ShowPropertyCache           ' This will display "JeffSmith" for Owner,
                              ' "Fabrikam" for Division, "Windows NT"
                              ' for OperatingSystem, and so on.
 
  pList.GetInfo                ' Refreshes entire cache, overwriting 
                               ' "JeffSmith" for the Owner property.
  ShowPropertyCache            ' This will display "Owner" for Owner,
                               ' "Fabrikam" for Division, "Windows NT"
                               ' for OperatingSystem, and so on.
end sub

sub ShowPropertyCache()
  txtOwner.value = pList.Get("Owner")
  txtDiv.value = pList.Get("Division")
  txtOS.Value = pList.Get("OperatingSystem")
  txtOSV.value = pList.Get("OperatingSystemVersion")
end sub
</script>

</html>

Im folgenden Codebeispiel wird die Wirkung von Get und GetInfo hervorgehoben. Aus Gründen der Kürze wird die Fehlerüberprüfung ausgelassen.

IADs *pADs;
IADsPropertyList *pList;
BSTR bstr;
VARIANT var;
HRESULT hr;
 
hr = ADsGetObject(L"WinNT://somecomputer,computer",
                  IID_IADsPropertyList,
                  (void**)&pList);

if(!(hr==S_OK)){return hr;}

VariantInit(&var);
 
// Get the number of property entries, should be zero.
long pCount;      
hr = pList->get_PropertyCount(&pCount);
printf("    prop count = %d\n",pCount);     // 0 for empty cache.
 
hr = pList->QueryInterface(IID_IADs, (void**)&pADs);
 
 
// Set "Owner=JeffSmith" in the property cache.
V_BSTR(&var) = SysAllocString(L"JeffSmith");
V_VT(&var) = VT_BSTR;
hr = pADs->Put(CComBSTR("Owner"), var);
VariantClear(&var);
 
// This time the number of property entries should read one (1).
hr = pList->get_PropertyCount(&pCount);
printf("    prop count = %d\n",pCount);    // 1 for what was set.
 
// The following Get invokes GetInfo implicitly, but 
// the cache (that is, "Owner=JeffSmith") remains intact.
hr = pADs->Get(CComBSTR("Division"), &var);  
printf("    division   = %S\n", V_BSTR(&var));
VariantClear(&var);
 
hr = pADs->Get(CComBSTR("Owner"), &var);
printf("    owner      = %S\n", V_BSTR(&var));  // Owner = JeffSmith
VariantClear(&var);
 
// The following GetInfo call refreshes the entire prop cache.
// Now Owner is no longer "JeffSmith", but the value stored in the
// persistent store, for example, "BenSmith".
hr = pADs->GetInfo();
 
hr = pADs->Get(CComBSTR("Owner"), &var);
printf("    owner      = %S\n", V_BSTR(&var));  // Owner = BenSmith
VariantClear(&var);
 
// ...

if(pADs)
   pADs->Release();

if(pList)
   pList->Release();

Anforderungen

   
Unterstützte Mindestversion (Client) Windows Vista
Unterstützte Mindestversion (Server) Windows Server 2008
Zielplattform Windows
Kopfzeile iads.h
DLL Activeds.dll

Weitere Informationen

Iads

IADs::Get

IADs::GetEx

IADs::GetInfoEx

Eigenschaftencache