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

CreateRefreshableObject Method

Previous pageReturn to chapter overviewNext page

描述

 

IWbemHiPerfProvider.CreateRefreshableObject方法请求一个可刷新的实例对象。响应客户端请求IWbemConfigureRefresher.AddObjectByPathIWbemConfigureRefresher.AddObjectByTemplate接口,WMI Refresher调用IWbemHiPerfProvider.CreateRefreshableObject.提供者从提供的模板对象中读取密钥,并在ppRefreshable参数中提供一个对象,每当调用pRefresher上的刷新方法时,该参数将被刷新。提供者将可刷新对象与提供的更新程序相关联,该对象从早期调用IWbemHiPerfProvider.CreateRefresher获取。

 

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

 

C++ 语法

 

HRESULT CreateRefreshableObject(

[in]   IWbemServices *pNamespace,

[in]   IWbemObjectAccess *pTemplate,

[in]   IWbemRefresher *pRefresher,

[in]   long lFlags,

[in]   IWbemContext *pCtx,

[out]  IWbemObjectAccess **ppRefreshable,

[out]  long *plId

);

 

PowerBASIC 语法

 

METHOD CreateRefreshableObject ( _

BYVAL pNamespace AS IWbemServices, _

BYVAL pTemplate AS IWbemObjectAccess, _

BYVAL pRefresher AS IWbemRefresher, _

BYVAL lFlags AS LONG, _

BYVAL pCtx AS IWbemContext, _

BYREF ppRefreshable AS IWbemObjectAccess, _

BYREF plId AS LONG _

) AS LONG

 

参数

 

pNamespace

 

指向Windows Management的IWbemServices指针,可以为提供商提供的任何请求提供服务。如果指针在执行过程中必须调用回WMI,则提供者会调用AddRef.

 

pTemplate

 

指向包含模板的IWbemObjectAccess对象。

 

pRefresher

 

指向包含通过调用IWbemHiPerfProvider.CreateRefresher获取的复习的IWbemRefresher对象的指针。

 

lFlags

 

保留。该参数必须为0。

 

pCtx

 

通常为NULL;否则,指向一个或多个动态类提供者所需的IWbemContext对象的指针。必须在特定提供者的文档中指定上下文对象中的值。

 

ppRefreshable

 

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

 

plId

 

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

 

返回值

 

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

 

退货代码

描述

WBEM_S_NO_ERROR

该方法成功。

WBEM_E_ACCESS_DENIED

当前用户没有检索指定类的实例的权限。

WBEM_E_INVALID_OBJECT_PATH

指定的路径无效。

WBEM_E_INVALID_PARAMETER

指定了无效参数。

WBEM_E_OUT_OF_MEMORY

无法分配内存

WBEM_E_FAILED

这表示其他未指定的错误。

WBEM_E_NOT_FOUND

提供者无法枚举所请求的类。

WBEM_E_PROVIDER_NOT_CAPABLE

提供者不支持刷新实例对象。除非需要更具体的错误代码,否则返回此错误代码。

 

示例代码

 

以下代码示例介绍如何实现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 XP或Windows 2000 Professional。

服务器

需要Windows Server 2008,Windows Server 2003或Windows 2000 Server。

在Wbemprov.inc中声明。

DLL

需要Wmiprvsd.dll。