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

返回 WMI 的 IWbemServices 指针,该指针可为来自提供程序的任何请求提供服务。 如果提供程序在执行期间需要回调 WMI,则应在此指针上调用 AddRef

[in] wszClass

指向 WCHAR 字符串的指针,该字符串指定返回其实例的类。

[in] lFlags

包含标志的整数。

[in] pCtx

通常 为 NULL;否则为指向一个或多个动态类提供程序所需的 IWbemContext 对象的指针。 必须在提供程序文档中指定上下文对象中的值。 有关详细信息,请参阅调用 WMI

[in] pSink

指向客户端提供给 IWbemServices 的任何异步方法的 IWbemObjectSink 实现的指针。

返回值

此方法返回指示方法调用状态的 HRESULT。 以下列表列出了 HRESULT 中包含的值。

HiPerf 提供程序可以通过 QueryInstances 的返回代码或通过调用 pResponseHandlerSetStatus 方法报告成功或失败。 如果调用 SetStatus 方法,则通过 pResponseHandler 发送的返回代码优先于 QueryInstances 返回代码。

注解

WMI 调用 QueryInstances 以响应 IWbemServices::CreateInstanceEnumIWbemServices::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
标头 wbemprov.h (包括 Wbemidl.h)
Library Wbemuuid.lib
DLL Wmiprvsd.dll

另请参阅

开发 WMI 提供程序

IWbemHiPerfProvider

将实例提供程序转换为高性能提供程序

性能计数器提供程序

编写实例提供程序