Поделиться через


Метод IWbemHiPerfProvider::QueryInstances (wbemprov.h)

Метод IWbemHiPerfProvider::QueryInstances возвращает экземпляры указанного класса с помощью предоставленного экземпляра IWbemObjectSink . Метод должен вернуться немедленно. Интерфейс IWbemObjectSink используется для указания результатов.

Примечание Если поставщик не реализует этот метод, он должен вернуть WBEM_E_PROVIDER_NOT_CAPABLE.
 

Синтаксис

HRESULT QueryInstances(
  [in] IWbemServices   *pNamespace,
  [in] WCHAR           *wszClass,
  [in] long            lFlags,
  [in] IWbemContext    *pCtx,
  [in] IWbemObjectSink *pSink
);

Параметры

[in] pNamespace

Указатель IWbemServices на WMI, который может обслуживать любой запрос от поставщика. Поставщик должен вызвать AddRef для этого указателя, если ему необходимо выполнить обратный вызов WMI во время выполнения.

[in] wszClass

Указатель на строку WCHAR , которая указывает класс, экземпляры которого возвращаются.

[in] lFlags

Целое число, содержащее флаги.

[in] pCtx

Как правило, значение NULL; в противном случае — указатель на объект IWbemContext , необходимый одному или нескольким поставщикам динамических классов. Значения в объекте контекста должны быть указаны в документации поставщика. Дополнительные сведения см. в разделе Вызовы WMI.

[in] pSink

Указатель на реализацию IWbemObjectSink , предоставляемую клиентом для любого из асинхронных методов IWbemServices.

Возвращаемое значение

Этот метод возвращает HRESULT , указывающий состояние вызова метода. В следующем списке перечислены значения, содержащиеся в HRESULT.

Поставщики HiPerf могут сообщать об успешном или неудачном выполнении с помощью кода возврата из QueryInstances или вызова метода SetStatuspResponseHandler. При вызове метода SetStatus код возврата, отправляемый через pResponseHandler , имеет приоритет над кодом возврата QueryInstances .

Комментарии

WMI вызывает QueryInstances в ответ на запрос IWbemServices::CreateInstanceEnum или IWbemServices::CreateInstanceEnumAsync .

Вызывается метод IWbemObjectSink::SetStatus для указания конца результирующих наборов. При возникновении ошибок IWbemObjectSink::SetStatus также можно вызывать без промежуточных вызовов IWbemObjectSink::Indicate.

Примеры

В следующем примере кода показано, как реализовать 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;
}

Требования

Требование Значение
Минимальная версия клиента Windows Vista
Минимальная версия сервера Windows Server 2008
Целевая платформа Windows
Header wbemprov.h (включая Wbemidl.h)
Библиотека Wbemuuid.lib
DLL Wmiprvsd.dll

См. также раздел

Разработка поставщика WMI

IWbemHiPerfProvider

Преобразование поставщика экземпляра в поставщик High-Performance

Поставщик счетчиков производительности

Написание поставщика экземпляров