Tätigen von Aufrufen an WMI
Anbieter können von WMI implementierte Methoden aus ihren Methodenimplementierungen aufrufen. Es gibt jedoch besondere Überlegungen, wenn ein Anbieter die WMI-Implementierung einer Methode IWbemServices aus seiner eigenen Implementierung derselben Methode aufruft. Diese Überlegungen sind unabhängig davon wichtig, ob der Anbieter die synchrone oder asynchrone Version der Methode aufruft.
Jede Methode IWbemServices, die ein Anbieter implementieren kann, verfügt über einen Parameter pCtx, einen Zeiger auf eine Schnittstelllenimplementierung IWbemContext . Wenn WMI den Anbieter aufruft, übergibt WMI einen gültigen Zeiger in diesem Parameter. Ein Anbieter muss bei allen Aufrufen von WMI immer denselben Zeiger übergeben, den er während der Wartungsanforderungen durchführt. Wenn Sie pCtx nicht entsprechend festlegen, kann dies dazu führen, dass WMI eine Endlosschleife startet.
Das folgende Codebeispiel zeigt die richtige Methode zum Aufrufen der WMI-Implementierung von GetObject aus einer Implementierung von GetObjectAsync.
STDMETHODIMP CClassProv::GetObjectAsync (BSTR ObjectPath,
long lFlags, IWbemContext *pCtx,
IWbemObjectSink *pHandler)
{
IWbemClassObject *pclObj = NULL;
IWbemServices* m_pNamespace;
HRESULT hr = m_pNamespace->GetObject(
_bstr_t(L"AClass"), 0, pCtx, &pclObj,
NULL );
pclObj->Release();
return pHandler->SetStatus(0, hr, NULL, NULL);
}
Das C++-Codebeispiel in diesem Thema erfordert die folgenden Verweise und #include-Anweisungen für eine ordnungsgemäße Kompilierung.
#define _WIN32_DCOM
#include <iostream>
using namespace std;
#include <comdef.h>
#include <Wbemidl.h>
#pragma comment(lib, "wbemuuid.lib")
Instanz-, Klassen- und Eigenschaftenanbieter dürfen keine Aufrufe an WMI ausgeben, die die Änderung von Daten während der Bedienung einer Leseanforderung anfordern. Die einzigen Anbieter, die Ausnahmen von dieser Regel sind, sind Pushanbieter. Ein Pushanbieter ist ein Klassenanbieter, der Daten im WMI-Repository speichert und sich auf WMI stützt, um Anforderungen von Clients zu verarbeiten. Während der Bedienung einer Leseanforderung kann ein Pushanbieter das WMI-Repository aktualisieren, muss jedoch den Parameter lFlags im entsprechenden Aufruf IWbemServices auf WBEM_FLAG_OWNER_UPDATE festlegen.
Ereignisanbieter dürfen während der Wartung eines Aufrufs keine Klassenänderungen vornehmen. Sie können auch keine ereignisbezogenen Aufrufe ausgeben, z. B. das Ändern eines Ereignisfilters.
Zugehörige Themen