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
返回 WMI 的 IWbemServices 指针,该指针可为来自提供程序的任何请求提供服务。 如果提供程序在执行期间需要回调 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) |
Library | Wbemuuid.lib |
DLL | Wmiprvsd.dll |
另请参阅
将实例提供程序转换为高性能提供程序