Share via


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::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)
程式庫 Wbemuuid.lib
Dll Wmiprvsd.dll

另請參閱

開發 WMI 提供者

IWbemHiPerfProvider

將實例提供者變成 High-Performance 提供者

效能計數器提供者

撰寫實例提供者