描述
IWbemHiPerfProvider.CreateRefreshableEnum方法创建一个新的可刷新枚举。WMI 复习调用此方法以响应客户端请求IWbemConfigureRefresher.AddEnum.提供商将提供的IWbemHiPerfEnum对象与提供的复习程序相关联。在每次调用所提供的刷新程序刷新方法时,提供程序确保枚举器包含一组wszClass参数中列出的类的所有实例,并且这些实例包含更新的信息。这样做的一个可能办法是在刷新器中保留一系列可刷新的枚举器。
注意如果提供程序未实现此方法,则必须返回WBEM_E_PROVIDER_NOT_CAPABLE。
C++ 语法
HRESULT CreateRefreshableEnum( [in] IWbemServices *pNamespace, [in] LPCWSTR wszClass, [in] IWbemRefresher *pRefresher, [in] long lFlags, [in] IWbemContext *pCtx, [in] IWbemHiPerfEnum *pHiPerfEnum, [out] long *plId ); |
PowerBASIC 语法
METHOD CreateRefreshableEnum ( _ BYVAL pNamespace AS IWbemServices, _ BYREF wszClass AS WSTRINGZ, _ BYVAL pRefresher AS IWbemRefresher, _ BYVAL long lFlags AS LONG, _ BYVAL pCtx AS IWbemContext, _ BYVAL pHiPerfEnum AS IWbemHiPerfEnum, _ BYREF plId AS LONG _ ) AS LONG |
参数
pNamespace
指向Windows Management的IWbemServices指针,可以为提供商提供的请求提供服务。如果pNamespace在执行过程中必须调用Windows Management,则提供程序将在此指针上调用AddRef.
wszClass
恒定的,以null结尾的16位字符串的Unicode字符,其包含类的名称,其实例在pHiPerfEnum 参数中刷新。
pRefresher
指向包含通过调用IWbemHiPerfProvider.CreateRefresher获取的复习的IWbemRefresher对象的指针。
lFlags
保留。该参数必须为0(零)。
pCtx
通常为NULL;否则,指向一个或多个动态类提供者所需的IWbemContext对象的指针。必须在特定提供者的文档中指定上下文对象中的值。
pHiPerfEnum
指向包含高性能枚举的IWbemHiPerfEnum对象。
plId
指向由提供程序返回的唯一标识可刷新枚举的整数的指针。
返回值
此方法返回一个HRESULT,指示方法调用的状态。下表列出了HRESULT中包含的值。
退货代码 |
描述 |
WBEM_S_NO_ERROR |
该方法成功。 |
WBEM_E_PROVIDER_NOT_CAPABLE |
提供者不实现此方法。 |
WBEM_E_INVALID_CLASS |
提供者不支持所请求的类。 |
WBEM_E_ACCESS_DENIED |
当前用户没有检索指定类的实例的权限。 |
WBEM_E_NOT_FOUND |
找不到请求的实例。 |
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 |
提供者不支持刷新实例对象。除非需要更具体的错误代码,否则在所有情况下返回此错误代码,如果不需要更具体的代码。 |
示例代码
以下代码示例介绍如何实现CreateRefreshableEnum.
HRESULT CHiPerfProvider::CreateRefreshableEnum(
/* [in] */IWbemServices *pNamespace,
/* [in] */LPCWSTR wszClass,
/* [in] */IWbemRefresher *pRefresher,
/* [in] */long lFlags,
/* [in] */IWbemContext *pCtx,
/* [in] */IWbemHiPerfEnum *pEnum,
/* [out] */ long *plId
)
{
// Use a private interface defined
// to talk with the refresher.
IMyRefresher* pMyRefr = NULL;
HRESULT hres = pRefresher->QueryInterface(
IID_IMyRefresher,
(void**) &pMyRefr );
if ( SUCCEEDED( hres ) )
{
LPLONG plLastId;
// Generates a unique identifier
*plId = InterlockedIncrement( &plLastId );
// Use an internal method to add the
// enumerator to an array.
pMyRefr->AddEnum( wszClass, *plId, pEnum );
pMyRefr->Release();
}
return hres;
}
备注
除了刷新操作之外,提供者不得修改可刷新枚举器。枚举是浅的,所以放置在枚举器中的所有实例都应该是由wszClass指定的类。
提供者不得访问枚举器,除非WMI调用所有者的IWbemRefresher.Refresh方法。与可刷新对象一样,提供者不得更新枚举器,除非拥有枚举器的对象刷新枚举器。
要求
客户 |
需要Windows Vista,Windows XP或Windows 2000 Professional。 |
服务器 |
需要Windows Server 2008,Windows Server 2003或Windows 2000 Server。 |
头 |
在Wbemprov.inc中声明 |
DLL |
需要Wmiprvsd.dll。 |


