Método IWbemHiPerfProvider::QueryInstances (wbemprov.h)
O método IWbemHiPerfProvider::QueryInstances retorna instâncias da classe especificada usando a instância IWbemObjectSink fornecida. O método deve retornar imediatamente. A interface IWbemObjectSink é usada para especificar resultados.
Sintaxe
HRESULT QueryInstances(
[in] IWbemServices *pNamespace,
[in] WCHAR *wszClass,
[in] long lFlags,
[in] IWbemContext *pCtx,
[in] IWbemObjectSink *pSink
);
Parâmetros
[in] pNamespace
Um ponteiro IWbemServices de volta para o WMI que pode atender a qualquer solicitação do provedor. O provedor deve chamar AddRef nesse ponteiro se precisar chamar de volta para o WMI durante a execução.
[in] wszClass
Ponteiro para uma cadeia de caracteres WCHAR que especifica a classe cujas instâncias são retornadas.
[in] lFlags
Inteiro que contém os sinalizadores.
[in] pCtx
Normalmente NULL; caso contrário, um ponteiro para um objeto IWbemContext que é exigido por um ou mais provedores de classe dinâmica. Os valores no objeto de contexto devem ser especificados na documentação do provedor. Para obter mais informações, consulte Fazer chamadas para o WMI.
[in] pSink
Ponteiro para a implementação IWbemObjectSink fornecida pelo cliente para qualquer um dos métodos assíncronos de IWbemServices.
Retornar valor
Esse método retorna um HRESULT que indica o status da chamada de método. A lista a seguir lista o valor contido em um HRESULT.
Os provedores HiPerf podem relatar êxito ou falha por meio do código de retorno de QueryInstances ou por meio de uma chamada para o método SetStatus de pResponseHandler. Se você chamar o método SetStatus , o código de retorno enviado por meio de pResponseHandler terá precedência sobre o código de retorno QueryInstances .
Comentários
O WMI chama QueryInstances em resposta a uma solicitação IWbemServices::CreateInstanceEnum ou IWbemServices::CreateInstanceEnumAsync .
O método IWbemObjectSink::SetStatus é chamado para indicar o final do conjunto de resultados. Quando ocorrem condições de erro, IWbemObjectSink::SetStatus também pode ser chamado sem chamadas intermediárias para IWbemObjectSink::Indicate.
Exemplos
O exemplo de código a seguir mostra como 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 | Valor |
---|---|
Cliente mínimo com suporte | Windows Vista |
Servidor mínimo com suporte | Windows Server 2008 |
Plataforma de Destino | Windows |
Cabeçalho | wbemprov.h (include Wbemidl.h) |
Biblioteca | Wbemuuid.lib |
DLL | Wmiprvsd.dll |
Confira também
Como desenvolver um provedor do WMI
Transformar um provedor de instância em um provedor de alto desempenho