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

CreateRefreshableEnum Method

Previous pageReturn to chapter overviewNext page

描述

 

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。