描述
IWbemHiPerfProvider.CreateRefreshableObject方法请求一个可刷新的实例对象。响应客户端请求IWbemConfigureRefresher.AddObjectByPath或IWbemConfigureRefresher.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。 |


