勇芳软件工作室.汉化:  Windows Management Instrumentation > COM API for WMI > Interfaces > IWbemHiPerfProvider >

QueryInstances Method

Previous pageReturn to chapter overviewNext page

描述

 

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的返回代码或pResponseHandlerSetStatus方法的呼叫来报告成功或失败。如果您调用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.CreateInstanceEnumIWbemServices.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。