Effettuare chiamate a WMI
I provider possono chiamare i metodi implementati da WMI dall'interno delle implementazioni del metodo. Tuttavia, esistono considerazioni speciali quando un provider chiama l'implementazione WMI di un metodo IWbemServices dall'interno della propria implementazione dello stesso metodo. Queste considerazioni sono importanti indipendentemente dal fatto che il provider chiami la versione sincrona o asincrona del metodo.
Ogni metodo IWbemServices che un provider può implementare ha un parametro pCtx , un puntatore a un'implementazione dell'interfaccia IWbemContext . Quando WMI chiama il provider, WMI passa un puntatore valido in questo parametro. Un provider deve sempre passare lo stesso puntatore in tutte le chiamate a WMI effettuate durante la manutenzione delle richieste. Se non si imposta pCtx in modo appropriato, WMI può avviare un ciclo infinito.
Nell'esempio di codice seguente viene illustrato il modo corretto per chiamare l'implementazione WMI di GetObject dall'interno di un'implementazione di 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);
}
L'esempio di codice C++ in questo argomento richiede i riferimenti e le istruzioni #include seguenti per la compilazione corretta.
#define _WIN32_DCOM
#include <iostream>
using namespace std;
#include <comdef.h>
#include <Wbemidl.h>
#pragma comment(lib, "wbemuuid.lib")
I provider di istanze, classi e proprietà non devono eseguire chiamate a WMI che richiedono la modifica dei dati durante la manutenzione di una richiesta di lettura. Gli unici provider che sono eccezioni a questa regola sono provider push. Un provider di push è un provider di classi che archivia i dati nel repository WMI e si basa su WMI per gestire le richieste dai client. Durante la manutenzione di una richiesta di lettura, un provider di push può aggiornare il repository WMI, ma deve impostare il parametro lFlags su WBEM_FLAG_OWNER_UPDATE nella chiamata IWbemServices appropriata.
I provider di eventi non devono apportare modifiche alle classi durante la manutenzione di una chiamata. Non possono inoltre eseguire chiamate correlate agli eventi, ad esempio la modifica di un filtro eventi.
Argomenti correlati