Metodo IWbemHiPerfProvider::CreateRefreshableObject (wbemprov.h)

Il metodo IWbemHiPerfProvider::CreateRefreshableObject richiede un oggetto istanza aggiornabile. Il refresher WMI chiama IWbemHiPerfProvider::CreateRefreshableObject in risposta a una richiesta client alle interfacce IWbemConfigureRefresher::AddObjectByPath o IWbemConfigureRefresher::AddObjectByTemplate . Il provider legge la chiave dall'oggetto modello fornito e fornisce un oggetto nel parametro ppRefreshable che verrà aggiornato ogni volta che viene chiamato il metodo refresh in pRefresher . Il provider associa l'oggetto aggiornabile all'aggiornamento fornito, ottenuto da una chiamata precedente a IWbemHiPerfProvider::CreateRefresher.

Nota Se un provider non implementa questo metodo, deve restituire WBEM_E_PROVIDER_NOT_CAPABLE.
 

Sintassi

HRESULT CreateRefreshableObject(
  [in]  IWbemServices     *pNamespace,
  [in]  IWbemObjectAccess *pTemplate,
  [in]  IWbemRefresher    *pRefresher,
  [in]  long              lFlags,
  [in]  IWbemContext      *pContext,
  [out] IWbemObjectAccess **ppRefreshable,
  [out] long              *plId
);

Parametri

[in] pNamespace

Puntatore IWbemServices in Gestione Windows, che può gestire qualsiasi richiesta effettuata dal provider. Se il puntatore deve richiamare in WMI durante l'esecuzione, il provider chiama AddRef su di esso.

[in] pTemplate

Puntatore a un oggetto IWbemObjectAccess che contiene il modello.

[in] pRefresher

Puntatore a un oggetto IWbemRefresher che contiene un aggiornamento ottenuto chiamando IWbemHiPerfProvider::CreateRefresher.

[in] lFlags

Riservato. Questo parametro deve essere 0.

[in] pContext

In genere NULL; in caso contrario, un puntatore a un oggetto IWbemContext richiesto da uno o più provider di classi dinamiche. I valori nell'oggetto contesto devono essere specificati nella documentazione specifica del provider. Per altre informazioni su questo parametro, vedere Effettuare chiamate a WMI.

[out] ppRefreshable

Puntatore che contiene il riferimento a un oggetto IWbemObjectAccess , che conterrà l'oggetto aggiornabile.

[out] plId

Puntatore a un numero intero restituito dal provider che identifica in modo univoco questo oggetto aggiornabile.

Valore restituito

Questo metodo restituisce un valore HRESULT che indica lo stato della chiamata al metodo. L'elenco seguente elenca il valore contenuto in hrESULT.

Commenti

Il modello di istanza fornito conterrà un oggetto con le proprietà chiave compilate. L'oggetto restituito deve essere un oggetto univoco aggiornabile. Il provider non deve toccare l'oggetto aggiornabile tranne durante un'operazione di aggiornamento. Il provider non deve accedere all'oggetto restituito, a meno che l'oggetto proprietario dell'aggiornamento non ripristini l'oggetto. Verranno compilate le proprietà chiave del modello di istanza fornito. Il provider deve anche convalidare il percorso dell'istanza.

Esempio

Nell'esempio di codice seguente viene descritto come implementare 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;
}

Requisiti

Requisito Valore
Client minimo supportato Windows Vista
Server minimo supportato Windows Server 2008
Piattaforma di destinazione Windows
Intestazione wbemprov.h (include Wbemidl.h)
Libreria Wbemuuid.lib
DLL Wmiprvsd.dll

Vedi anche

Sviluppo di un provider WMI

IWbemHiPerfProvider

Creazione di un provider di istanze in un provider di High-Performance

Provider contatore prestazioni

Scrittura di un provider di istanze