Share via


IWbemHiPerfProvider::CreateRefreshableObject 方法 (wbemprov.h)

IWbemHiPerfProvider::CreateRefreshableObject 方法會要求可重新整理的實例物件。 WMI 重新整理器會呼叫 IWbemHiPerfProvider::CreateRefreshableObject ,以回應 IWbemConfigureRefresher::AddObjectByPathIWbemConfigureRefresher::AddObjectByTemplate 介面的要求。 提供者會從提供的樣板對象讀取索引鍵,並在呼叫 pRefresher 上的 refresh 方法時,提供 ppRefreshable 參數中的物件。 提供者會將可重新整理的物件與提供的重新整理器建立關聯,從先前呼叫 IWbemHiPerfProvider::CreateRefresher 取得。

注意 如果提供者未實作此方法,它必須 傳回WBEM_E_PROVIDER_NOT_CAPABLE
 

語法

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)
程式庫 Wbemuuid.lib
Dll Wmiprvsd.dll

另請參閱

開發 WMI 提供者

IWbemHiPerfProvider

將實例提供者變成 High-Performance 提供者

效能計數器提供者

撰寫實例提供者