Metodo IWbemHiPerfProvider::QueryInstances (wbemprov.h)
Il metodo IWbemHiPerfProvider::QueryInstances restituisce istanze della classe specificata usando l'istanza IWbemObjectSink specificata. Il metodo deve restituire immediatamente. L'interfaccia IWbemObjectSink viene usata per specificare i risultati.
Sintassi
HRESULT QueryInstances(
[in] IWbemServices *pNamespace,
[in] WCHAR *wszClass,
[in] long lFlags,
[in] IWbemContext *pCtx,
[in] IWbemObjectSink *pSink
);
Parametri
[in] pNamespace
Puntatore IWbemServices a WMI che può eseguire il servizio di qualsiasi richiesta dal provider. Il provider deve chiamare AddRef in questo puntatore se deve tornare a WMI durante l'esecuzione.
[in] wszClass
Puntatore a una stringa WCHAR che specifica la classe le cui istanze vengono restituite.
[in] lFlags
Intero contenente i flag.
[in] pCtx
In genere NULL; in caso contrario, un puntatore a un oggetto IWbemContext richiesto da uno o più provider di classi dinamiche. I valori nell'oggetto contesto devono essere specificati nella documentazione del provider. Per altre informazioni, vedere Creazione di chiamate a WMI.
[in] pSink
Puntatore all'implementazione IWbemObjectSink fornita dal client a uno qualsiasi dei metodi asincroni di IWbemServices.
Valore restituito
Questo metodo restituisce un HRESULT che indica lo stato della chiamata al metodo. L'elenco seguente elenca il valore contenuto in un HRESULT.
I provider HiPerf possono segnalare l'esito positivo o negativo tramite il codice restituito da QueryInstances o tramite una chiamata al metodo SetStatus di pResponseHandler. Se si chiama il metodo SetStatus , il codice restituito inviato tramite pResponseHandler ha la precedenza sul codice restituito QueryInstances .
Commenti
WMI chiama QueryInstances in risposta a una richiesta IWbemServices::CreateInstanceEnum o IWbemServices::CreateInstanceEnumAsync.
Il metodo IWbemObjectSink::SetStatus viene chiamato per indicare la fine del set di risultati. Quando si verificano condizioni di errore, è possibile chiamare anche IWbemObjectSink::SetStatus senza chiamate di intervento a IWbemObjectSink::Indicate.
Esempio
Nell'esempio di codice seguente viene illustrato come implementare QueryInstances.
HRESULT CMyHiPerfProvider::QueryInstances(
/* [in] */ IWbemServices* pNamespace,
/* [in] */ BSTR strClass,
/* [in] */ long lFlags,
/* [in] */ IWbemContext __RPC_FAR *pCtx,
/* [in] */ IWbemObjectSink __RPC_FAR *pSink
)
{
IWbemClassObject *pClass = 0;
IWbemClassObject *pNextInst = 0;
// The IWbemObjectSink interface must be
// implemented in a class that you define. You then
// must assign the pResponseHandler pointer
// an instance of the class that implements
// the IWbemObjectSink interface.
IWbemObjectSink* pResponseHandler = 0;
HRESULT hRes;
// Use the namespace pointer to retrieve a class
// definition.
hRes = pNamespace ->GetObject(strClass, 0, NULL, &pClass, 0);
if (WBEM_NO_ERROR==hRes)
return hRes;
// Now loop through the private source and create each instance.
for (int i = 0 ; i < NUM_OF_INSTANCES ; i++)
{
hRes = pClass->SpawnInstance(0, &pNextInst);
// Exit loop if no new instance is spawned
if (WBEM_S_FALSE == hRes)
break;
if(NULL!=pNextInst)
{
// Create the instance.
// For example, call a function (FillInst) that
// assigns a value to the pNextInst pointer.
/*FillInst(pNextInst);*/
// Deliver the class to WMI.
pResponseHandler->Indicate(1, &pNextInst);
pNextInst->Release();
pNextInst=NULL;
}
}
// Send a finish message to WMI.
pResponseHandler->SetStatus(0, WBEM_S_NO_ERROR, 0, 0);
// Free memory resources.
pNamespace->Release();
pClass->Release();
SysFreeString(strClass);
return WBEM_S_NO_ERROR;
}
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows Vista |
Server minimo supportato | Windows Server 2008 |
Piattaforma di destinazione | Windows |
Intestazione | wbemprov.h (include Wbemidl.h) |
Libreria | Wbemuuid.lib |
DLL | Wmiprvsd.dll |
Vedi anche
Creazione di un provider di istanze in un provider di High-Performance