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"
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 |