描述
IWbemHiPerfProvider.QueryInstances方法使用提供的IWbemObjectSink实例返回指定类的实例。该方法应立即返回。IWbemObjectSink界面用于指定结果。
注意如果提供程序未实现此方法,则必须返回WBEM_E_PROVIDER_NOT_CAPABLE。
C++ 语法
HRESULT QueryInstances( [in] IWbemServices *pNamespace, [in] WCHAR *wszClass, [in] long lFlags, [in] IWbemContext *pCtx, [in] IWbemObjectSink *pSink ); |
PowerBASIC 语法
METHOD QueryInstances ( _ BYVAL pNamespace AS IWbemServices, _ BYVAL wszClass AS DWORD, _ BYREF apObj AS IWbemObjectAccess, _ BYVAL lFlags AS LONG, _ BYVAL pCtx AS IWbemContext _ ) AS LONG |
参数
pNamespace
指向WMI的IWbemServices指针,可以为提供商提供任何请求。如果需要在执行过程中回调WMI,那么提供者应该调用该指针的AddRef.
wszClass
指向WCHAR字符串的指针,该字符串指定返回其实例的类。
lFlags
包含标志的整数。
pCtx
通常为NULL;否则,指向一个或多个动态类提供者所需的IWbemContext对象的指针。必须在提供程序文档中指定上下文对象中的值。
pSink
指向由客户端提供给IWbemServices的任何异步方法的IWbemObjectSink实现的指针。
返回值
此方法返回一个HRESULT,指示方法调用的状态。下表列出了HRESULT中包含的值。
退货代码 |
描述 |
WBEM_E_ACCESS_DENIED |
当前用户没有检索指定实例的权限。 |
WBEM_E_FAILED |
即使操作有效,提供程序也在内部失败。 |
WBEM_E_NOT_FOUND |
找不到请求的实例。 |
WBEM_E_PROVIDER_NOT_CAPABLE |
提供程序无法枚举实例,无论它是否识别名称。如果不需要更具体的代码,则在所有情况下返回此错误代码。 |
WBEM_S_NO_ERROR |
该方法成功。 |
HiPerf提供商可以通过QueryInstances的返回代码或pResponseHandler的SetStatus方法的呼叫来报告成功或失败。如果您调用SetStatus方法,通过pResponseHandler发送的返回码优先于QueryInstances返回码。
示例代码
以下代码示例显示了如何实现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;
}
备注
WMI调用QueryInstances响应IWbemServices.CreateInstanceEnum或IWbemServices.CreateInstanceEnumAsync请求。
调用IWbemObjectSink.SetStatus方法来指示结果集的结束。当出现错误情况时,也可以调用IWbemObjectSink.SetStatus,而不会间接调用IWbemObjectSink.Indicate.
要求
客户 |
需要Windows Vista,Windows XP或Windows 2000 Professional。 |
服务器 |
需要Windows Server 2008,Windows Server 2003或Windows 2000 Server。 |
头 |
在Wbemprov.inc中声明。 |
DLL |
需要Wmiprvsd.dll。 |


