IWbemHiPerfProvider::QueryInstances 方法 (wbemprov.h)
IWbemHiPerfProvider::QueryInstances 方法會使用提供的 IWbemObjectSink 實例傳回指定類別的實例。 方法應該會立即傳回。 IWbemObjectSink 介面是用來指定結果。
語法
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 的傳回碼,或透過呼叫 pResponseHandler 的 SetStatus 方法回報成功或失敗。 如果您呼叫 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 |
標頭 | wbemprov.h (包含 Wbemidl.h) |
程式庫 | Wbemuuid.lib |
Dll | Wmiprvsd.dll |
另請參閱
將實例提供者變成 High-Performance 提供者