次の方法で共有


IWbemHiPerfProvider::CreateRefreshableObject メソッド (wbemprov.h)

IWbemHiPerfProvider::CreateRefreshableObject メソッドは、更新可能なインスタンス オブジェクトを要求します。 WMI Refresher は、IWbemConfigureRefresher::AddObjectByPath インターフェイスまたは IWbemConfigureRefresher::AddObjectByTemplate インターフェイスへのクライアント要求に応答して、IWbemHiPerfProvider::CreateRefreshableObject を呼び出します。 プロバイダーは、指定されたテンプレート オブジェクトからキーを読み取り、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 Management に戻します。このポインターは、プロバイダーによって行われた要求にサービスを提供できます。 ポインターの実行中にポインターが WMI にコールバックする必要がある場合、プロバイダーはその上で AddRef を呼び出します。

[in] pTemplate

テンプレートを含む IWbemObjectAccess オブジェクトへのポインター。

[in] pRefresher

IWbemHiPerfProvider::CreateRefresher を呼び出して取得したリフレッシャーを含む IWbemRefresher オブジェクトへのポインター。

[in] lFlags

予約済み。 このパラメーターは、0 にする必要があります。

[in] pContext

通常 は NULL です。それ以外の場合は、1 つ以上の動的クラス プロバイダーに必要な 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

こちらもご覧ください

WMI プロバイダーの開発

IWbemHiPerfProvider

インスタンス プロバイダーをハイパフォーマンス プロバイダーに変換する

パフォーマンス カウンタ プロバイダ

インスタンス プロバイダーの作成