Método IWbemHiPerfProvider::QueryInstances (wbemprov.h)
El método IWbemHiPerfProvider::QueryInstances devuelve instancias de la clase especificada mediante la instancia de IWbemObjectSink proporcionada. El método debe devolverse inmediatamente. La interfaz IWbemObjectSink se usa para especificar resultados.
Sintaxis
HRESULT QueryInstances(
[in] IWbemServices *pNamespace,
[in] WCHAR *wszClass,
[in] long lFlags,
[in] IWbemContext *pCtx,
[in] IWbemObjectSink *pSink
);
Parámetros
[in] pNamespace
Puntero IWbemServices a WMI que puede atender cualquier solicitud del proveedor. El proveedor debe llamar a AddRef en este puntero si necesita volver a llamar a WMI durante la ejecución.
[in] wszClass
Puntero a una cadena WCHAR que especifica la clase cuyas instancias se devuelven.
[in] lFlags
Entero que contiene las marcas.
[in] pCtx
Normalmente NULL; de lo contrario, un puntero a un objeto IWbemContext requerido por uno o varios proveedores de clases dinámicas. Los valores del objeto de contexto deben especificarse en la documentación del proveedor. Para más información, consulte Llamadas a WMI.
[in] pSink
Puntero a la implementación IWbemObjectSink proporcionada por el cliente a cualquiera de los métodos asincrónicos de IWbemServices.
Valor devuelto
Este método devuelve un valor HRESULT que indica el estado de la llamada al método. En la lista siguiente se muestra el valor contenido en un HRESULT.
Los proveedores de HiPerf pueden notificar el éxito o el error a través del código de retorno de QueryInstances o a través de una llamada al método SetStatus de pResponseHandler. Si llama al método SetStatus , el código de retorno enviado a través de pResponseHandler tiene prioridad sobre el código de retorno QueryInstances .
Comentarios
WMI llama a QueryInstances en respuesta a una solicitud IWbemServices::CreateInstanceEnum o IWbemServices::CreateInstanceEnumAsync .
Se llama al método IWbemObjectSink::SetStatus para indicar el final del conjunto de resultados. Cuando se producen condiciones de error, también se puede llamar a IWbemObjectSink::SetStatus sin llamadas intermedias a IWbemObjectSink::Indicate.
Ejemplos
En el ejemplo de código siguiente se muestra cómo implementar 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;
}
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows Vista |
Servidor mínimo compatible | Windows Server 2008 |
Plataforma de destino | Windows |
Encabezado | wbemprov.h (include Wbemidl.h) |
Library | Wbemuuid.lib |
Archivo DLL | Wmiprvsd.dll |
Consulte también
Desarrollo de un proveedor WMI
Conversión de un proveedor de instancias en un proveedor de alto rendimiento