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 的指针,它可以为提供程序的任何请求提供服务。 如果提供程序在执行过程中需要回调 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::指示调用。

例子

下面的代码示例演示如何实现 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
目标平台 窗户
标头 wbemprov.h (包括 Wbemidl.h)
Wbemuuid.lib
DLL Wmiprvsd.dll

另请参阅

开发 WMI 提供程序

IWbemHiPerfProvider

将实例提供程序转换为 High-Performance 提供程序

性能计数器提供程序

编写实例提供程序