IWbemHiPerfProvider::CreateRefreshableObject 方法 (wbemprov.h)

IWbemHiPerfProvider::CreateRefreshableObject 方法请求可刷新的实例对象。 WMI 刷新程序调用 IWbemHiPerfProvider::CreateRefreshableObject, 以响应客户端对 IWbemConfigureRefresher::AddObjectByPathIWbemConfigureRefresher::AddObjectByTemplate 接口的请求。 提供程序从提供的模板对象中读取密钥,并在 ppRefreshable 参数中提供一个对象,每当调用 pRefresher 上的 refresh 方法时,该对象都会刷新该对象。 提供程序将可刷新对象与提供的刷新程序相关联,该刷新器是从之前调用 IWbemHiPerfProvider::CreateRefresher 获取的。

注意 如果提供程序未实现此方法,则必须返回 WBEM_E_PROVIDER_NOT_CAPABLE
 

语法

HRESULT CreateRefreshableObject(
  [in]  IWbemServices     *pNamespace,
  [in]  IWbemObjectAccess *pTemplate,
  [in]  IWbemRefresher    *pRefresher,
  [in]  long              lFlags,
  [in]  IWbemContext      *pContext,
  [out] IWbemObjectAccess **ppRefreshable,
  [out] long              *plId
);

参数

[in] pNamespace

IWbemServices 指针返回到 Windows 管理,它可以为提供程序发出的任何请求提供服务。 如果指针在执行期间必须调用回 WMI,则提供程序会对其调用 AddRef

[in] pTemplate

指向包含模板的 IWbemObjectAccess 对象的指针。

[in] pRefresher

指向 IWbemRefresher 对象的指针,该对象包含通过调用 IWbemHiPerfProvider::CreateRefresher 获取的刷新器。

[in] lFlags

保留。 此参数必须为 0。

[in] pContext

通常 为 NULL;否则为指向一个或多个动态类提供程序所需的 IWbemContext 对象的指针。 必须在特定的提供程序文档中指定上下文对象中的值。 有关此参数的详细信息,请参阅 调用 WMI

[out] ppRefreshable

保存对 IWbemObjectAccess 对象的引用的指针,该对象将包含可刷新对象。

[out] plId

指向提供程序返回的整数的指针,该整数唯一标识此可刷新对象。

返回值

此方法返回指示方法调用状态的 HRESULT。 以下列表列出了 HRESULT 中包含的值。

注解

提供的实例模板将包含一个已填充关键属性的对象。返回的对象应该是唯一的可刷新对象。 提供程序不得触摸可刷新对象,除非在刷新操作期间。 您的提供程序不得访问返回的对象,除非拥有刷新程序的对象还原该对象。 将填写所提供的实例模板的关键属性。提供程序还应验证实例路径。

示例

以下代码示例介绍如何实现 CreateRefreshableObject

HRESULT CMyHiPerfProvider::CreateRefreshableObject(
  /* [in] */IWbemServices *pNamespace,
  /* [in] */IWbemObjectAccess *pTemplate,
  /* [in] */IWbemRefresher *pRefresher,
  /* [in] */long lFlags,
  /* [in] */IWbemContext *pCtx,
  /* [out] */IWbemObjectAccess **ppRefreshable,
  /* [out] */ long *plId
)
{
  // Use a private interface defined
  // to talk with the refresher. You must define
  // the IMyRefresher interface.
  IMyRefresher* pMyRefr = NULL;

  HRESULT hres = pRefresher->QueryInterface(
    IID_IMyRefresher,
    (void**) &pMyRefr );

  if ( SUCCEEDED( hres ) )
  {
    // Check for a valid instance.
    // You must implement the ValidateInst function.
    if ( ValidateInst( pTemplate ) )
    {
      IWbemClassObject* pTemplateObj = NULL;
      IWbemClassObject* pCloneObj = NULL;
      IWbemObjectAccess* pCloneAcc = NULL;

      // Clone the object, then get an
      // IWbemObjectAccess pointer.
      pTemplate->QueryInterface(
        IID_IWbemClassObject,
        (void**) &pTemplateObj );

      pTemplateObj->Clone( &pCloneObj );

      pCloneObj->QueryInterface(
        IID_IWbemObjectAccess,
        (void**) &pCloneAcc );

      // Generate a unique identifier.
      // For example, use:
      /**plId = InterlockedIncrement( &m_lLastId );*/

      // Add the object to an array of
      // objects to refresh.
      //For example, use:
      /*pMyRefr->AddInstance( *plId, pCloneAcc );*/

      // Maintains AddRef from QI
      *ppRefreshable = pCloneAcc;

      pTemplateObj->Release();
      pCloneObj->Release();
    }
    else
    {
      hres = WBEM_E_NOT_FOUND;
    }

    pMyRefr->Release();
  }

  return hres;
}

要求

要求
最低受支持的客户端 Windows Vista
最低受支持的服务器 Windows Server 2008
目标平台 Windows
标头 wbemprov.h (包括 Wbemidl.h)
Library Wbemuuid.lib
DLL Wmiprvsd.dll

另请参阅

开发 WMI 提供程序

IWbemHiPerfProvider

将实例提供程序转换为高性能提供程序

性能计数器提供程序

编写实例提供程序