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.

Nota Se um provedor não implementar esse método, ele deverá retornar WBEM_E_PROVIDER_NOT_CAPABLE.
 

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

IWbemHiPerfProvider

Transformar um provedor de instância em um provedor de alto desempenho

Provedor de Contadores de Desempenho

Escrever um provedor de instância