Freigeben über


IWbemServices::GetObjectAsync-Methode (wbemcli.h)

Die IWbemServices::GetObjectAsync-Methode ruft basierend auf seinem Pfad ein Objekt ab, entweder eine Klassendefinition oder instance. Dies ähnelt IWbemServices::GetObject , mit dem Unterschied, dass der Aufruf sofort zurückgegeben wird und das Objekt für die angegebene Objektsenke bereitgestellt wird.

Derzeit ruft diese Methode nur Objekte aus dem Namespace ab, der dem IWbemServices-Zeiger zugeordnet ist.

Syntax

HRESULT GetObjectAsync(
  [in] const BSTR      strObjectPath,
  [in] long            lFlags,
  [in] IWbemContext    *pCtx,
  [in] IWbemObjectSink *pResponseHandler
);

Parameter

[in] strObjectPath

Pfad des abzurufenden Objekts. Für einen instance Anbieter kann StrObjectPath das folgende Format aufweisen:

  • Namespace:Class.Key = "Value"
  • Namespace:Class = "Value"
  • Namespace:Class.Key = "Value", Key2 = "Value2"
Die Angabe des Namespace vor der Klasse ist optional. Objektpfade ohne Namespaces verweisen auf Instanzen im aktuellen Namespace. Bei Bedarf können Sie das Einfache Anführungszeichen (') durch das doppelte Anführungszeichen (") ersetzen, um den Anfang und das Ende von Zeichenfolgeneigenschaftentypen zu trennen.

Wenn dies NULL ist, wird ein leeres Objekt zurückgegeben, das zu einer neuen Klasse werden kann. Weitere Informationen finden Sie unter Erstellen einer Klasse.

[in] lFlags

Die folgenden Flags wirken sich auf das Verhalten dieser Methode aus.

WBEM_FLAG_USE_AMENDED_QUALIFIERS

Wenn dieses Flag festgelegt ist, ruft WMI die geänderten Qualifizierer ab, die im lokalisierten Namespace des Gebietsschemas der aktuellen Verbindung gespeichert sind. Wenn nicht festgelegt, werden nur die Qualifizierer abgerufen, die im unmittelbaren Namespace gespeichert sind.

WBEM_FLAG_DIRECT_READ

Dieses Flag bewirkt den direkten Zugriff auf den Anbieter für die angegebene Klasse ohne Berücksichtigung der übergeordneten Klasse oder Unterklassen.

WBEM_FLAG_SEND_STATUS

Registriert eine Anforderung zum Empfangen von zwischengeschalteten status Berichten über die Implementierung von IWbemObjectSink::SetStatus des Clients. Die Anbieterimplementierung muss die Berichterstellung für zwischengeschaltete status unterstützen, damit dieses Flag das Verhalten ändern kann.

[in] pCtx

Normalerweise NULL. Andernfalls handelt es sich um einen Zeiger auf ein IWbemContext-Objekt, das von dem Anbieter verwendet werden kann, der die angeforderte Klasse oder instance erzeugt. Die Werte im Kontextobjekt müssen in der Dokumentation für den betreffenden Anbieter angegeben werden. Weitere Informationen zu diesem Parameter finden Sie unter Tätigen von Aufrufen von WMI.

[in] pResponseHandler

Zeiger auf die Implementierung von IWbemObjectSink durch den Aufrufer. Dieser Handler empfängt das angeforderte Objekt, wenn es über die IWbemObjectSink::Indicate-Methode verfügbar wird. Der pObjParam-Parameter enthält das -Objekt. Wenn Fehlercode zurückgegeben wird, wird der angegebene IWbemObjectSink-Zeiger nicht verwendet. Wenn WBEM_S_NO_ERROR zurückgegeben wird, wird die IWbemObjectSink-Implementierung des Benutzers aufgerufen, um das Ergebnis des Vorgangs anzugeben. Die Windows-Verwaltung ruft AddRef nur in Fällen auf, in denen WBEM_S_NO_ERROR zurückgibt. In Fällen, in denen ein Fehlercode zurückgegeben wird, ist die Verweisanzahl identisch mit der beim Eintrag. Weitere Informationen zu diesem Parameter finden Sie unter Aufrufen einer Methode.

Rückgabewert

Diese Methode gibt ein HRESULT zurück, das den Status des Methodenaufrufs angibt. Die folgende Liste listet den Wert auf, der in einem HRESULT enthalten ist.

Bei einem Fehler können Sie alle verfügbaren Informationen aus der COM-Funktion GetErrorInfoGetErrorInfo abrufen.

COM-spezifische Fehlercodes können auch zurückgegeben werden, wenn Netzwerkprobleme dazu führen, dass die Remoteverbindung mit der Windows-Verwaltung verloren geht.

Hinweise

Wenn Sie einen instance Anbieter implementieren, sollten Sie den Beispielcode für den Objektpfadparser im WMI-Abschnitt des PSDK verwenden, um den Objektpfad zu analysieren, um zu erkennen, welches Objekt der Client anfordert. Darüber hinaus muss ein Anbieter, der eine abgeleitete Klasse unterstützt, nur die Werte für die lokalen Eigenschaften der -Klasse und nicht die geerbten Eigenschaften angeben. WMI fordert an, dass der Anbieter der Basisklasse geerbte Eigenschaften behandelt.

Beim Implementieren eines Klassenanbieters muss GetObjectAsync ermitteln, welche Klasse angefordert wird, indem der im strObjectPath-Parameter gespeicherte Klassennameobjektpfad analysiert wird. Die GetObjectAsync-Methode erstellt die Klasse dann entweder dynamisch oder übernimmt die Klasse aus einem privaten Cache. Anschließend sendet GetObjectAsync die -Klasse mithilfe des IWbemObjectSink-Zeigers , auf den der pResponseHandler-Parameter verweist, an WMI. Die IWbemObjectSink::SetStatus-Methode wird aufgerufen, um das Ende des Resultsets anzugeben. Er kann auch ohne eingreifende Aufrufe von IWbemObjectSink::Geben Sie an , ob Fehlerbedingungen auftreten.

Da der Rückruf möglicherweise nicht auf der gleichen Authentifizierungsebene zurückgegeben wird, die der Client benötigt, wird empfohlen, die semisynchrone Kommunikation anstelle der asynchronen Kommunikation zu verwenden. Wenn Sie eine asynchrone Kommunikation benötigen, finden Sie weitere Informationen unter Aufrufen einer Methode.

Weitere Informationen zur semisynchronen Verwendung von Methoden finden Sie unter IWbemServices::GetObject und Aufrufen einer Methode.

Beispiele

Im folgenden Beispiel wird beschrieben, wie Sie GetObjectAsync für einen instance Anbieter implementieren.

SCODE CInstPro::GetObjectAsync (BSTR ObjectPath, 
                                long lFlags, IWbemContext *pCtx,
                                IWbemObjectSink FAR* pHandler)
{
    ULONG cRef;         // Reference count
    SCODE sc;
    BOOL bOK = FALSE;

    IWbemServices *  m_pNamespace;
    IWbemClassObject FAR* pObj;

    // Check arguments.

    if(ObjectPath == NULL || pHandler == NULL ||
        m_pNamespace == NULL)
        return WBEM_E_INVALID_PARAMETER;

    
    // Based on the object path, produce an empty instance
    // of the class and gather required data,
    // setting the instance's property values accordingly.
    // This example assumes that GetByPath is implemented
    // by the provider to do this.
    // The IWbemPath interface can be used to parse
    // the object path, separating the namespace and class name.

    sc = GetByPath (ObjectPath, &pObj, pCtx);
    if(sc == S_OK) 
    {
        pHandler->Indicate (1, &pObj);
        pObj->Release();
        bOK = TRUE;
    }

    sc = (bOK) ? S_OK : WBEM_E_NOT_FOUND;

    // Set status.

    pHandler->SetStatus(0,sc, NULL, NULL);

    // Free memory resources.

    SysFreeString(ObjectPath);
    m_pNamespace->Release();
    pObj->Release();

    return sc;
  
}

Das folgende Beispiel zeigt, wie ein typischer Klassenanbieter GetObjectAsync implementiert.

HRESULT CStdProvider::GetObjectAsync( 
            /* [in] */ BSTR strObjectPath,
            /* [in] */ long lFlags,
            /* [in] */ IWbemContext __RPC_FAR *pCtx,
            /* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler
            )
{

    IWbemClassObject *pClass = 0;

// Assume there is an IWbemServices pointer available.
// Retrieve an 'empty' object which is built up
// into the class definition.

    HRESULT hRes = m_pSvc->GetObject(NULL, 0, NULL, &pClass, 0);
    if (hRes)
        return hRes;

// Parse the object path and determine which class is   
// required. The path string is the required class name.
// Fill in the properties required for the class definition
// using pClass->Put(...), and so on.

    
    // ...

    // Send the class definition back to WMI.
    pResponseHandler->Indicate(1, &pClass);

// Indicate that it is now finished.

    pResponseHandler->SetStatus(0, WBEM_S_NO_ERROR, 0, 0);
    SysFreeString(strObjectPath);
    m_pSvc->Release();
    pClass->Release();  // This is no longer needed.
    return WBEM_S_NO_ERROR;
}

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows Vista
Unterstützte Mindestversion (Server) Windows Server 2008
Zielplattform Windows
Kopfzeile wbemcli.h (include Wbemidl.h)
Bibliothek Wbemuuid.lib
DLL Fastprox.dll; Esscli.dll; FrameDyn.dll; FrameDynOS.dll; Ntevt.dll; Stdprov.dll; Viewprov.dll; Wbemcomn.dll; Wbemcore.dll; Wbemess.dll; Wbemsvc.dll; Wmipicmp.dll; Wmidcprv.dll; Wmipjobj.dll; Wmiprvsd.dll

Weitere Informationen

Aufrufen einer Methode

Erstellen einer Klasse

Beschreiben des Speicherorts eines WMI-Objekts

IWbemServices

IWbemServices::GetObject