IWbemHiPerfProvider::CreateRefreshableObject 方法 (wbemprov.h)
IWbemHiPerfProvider::CreateRefreshableObject 方法请求可刷新的实例对象。 WMI 刷新程序调用 IWbemHiPerfProvider::CreateRefreshableObject, 以响应客户端对 IWbemConfigureRefresher::AddObjectByPath 或 IWbemConfigureRefresher::AddObjectByTemplate 接口的请求。 提供程序从提供的模板对象中读取密钥,并在 ppRefreshable 参数中提供一个对象,每当调用 pRefresher 上的 refresh 方法时,该对象都会刷新该对象。 提供程序将可刷新对象与提供的刷新程序相关联,该刷新器是从之前调用 IWbemHiPerfProvider::CreateRefresher 获取的。
语法
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 |
另请参阅
将实例提供程序转换为高性能提供程序