Compartilhar via


Método IWbemHiPerfProvider::CreateRefreshableObject (wbemprov.h)

O método IWbemHiPerfProvider::CreateRefreshableObject solicita um objeto de instância atualizável. O Atualizador WMI chama IWbemHiPerfProvider::CreateRefreshableObject em resposta a uma solicitação de cliente para as interfaces IWbemConfigureRefresher::AddObjectByPath ou IWbemConfigureRefresher::AddObjectByTemplate . O provedor lê a chave do objeto de modelo fornecido e fornece um objeto no parâmetro ppRefreshable que será atualizado sempre que o método de atualização em pRefresher for chamado. O provedor associa o objeto atualizável ao atualizador fornecido, obtido de uma chamada anterior para IWbemHiPerfProvider::CreateRefresher.

Nota Se um provedor não implementar esse método, ele deverá retornar WBEM_E_PROVIDER_NOT_CAPABLE.
 

Sintaxe

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

Parâmetros

[in] pNamespace

Um ponteiro IWbemServices de volta para o Gerenciamento do Windows, que pode atender a qualquer solicitação feita pelo provedor. Se o ponteiro precisar chamar novamente para o WMI durante a execução, o provedor chamará AddRef nele.

[in] pTemplate

Ponteiro para um objeto IWbemObjectAccess que contém o modelo.

[in] pRefresher

Ponteiro para um objeto IWbemRefresher que contém um atualizador obtido chamando IWbemHiPerfProvider::CreateRefresher.

[in] lFlags

Reservado. Esse parâmetro deve ser 0.

[in] pContext

Normalmente NULL; caso contrário, um ponteiro para um objeto IWbemContext que é exigido por um ou mais provedores de classe dinâmica. Os valores no objeto de contexto devem ser especificados na documentação específica do provedor. Para obter mais informações sobre esse parâmetro, consulte Fazendo chamadas para WMI.

[out] ppRefreshable

Ponteiro que contém a referência a um objeto IWbemObjectAccess , que conterá o objeto atualizável.

[out] plId

Ponteiro para um inteiro retornado pelo provedor que identifica exclusivamente esse objeto atualizável.

Retornar valor

Esse método retorna um HRESULT que indica o status da chamada de método. A lista a seguir lista o valor contido em um HRESULT.

Comentários

O modelo de instância fornecido conterá um objeto com as propriedades de chave preenchidas. O objeto retornado deve ser um objeto exclusivo e atualizável. O provedor não deve tocar no objeto atualizável, exceto durante uma operação de atualização. Seu provedor não deve acessar o objeto retornado, a menos que o objeto proprietário do atualizador restaure o objeto. As principais propriedades do modelo de instância fornecida serão preenchidas. O provedor também deve validar o caminho da instância.

Exemplos

O exemplo de código a seguir descreve como implementar 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;
}

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows Vista
Servidor mínimo com suporte Windows Server 2008
Plataforma de Destino Windows
Cabeçalho wbemprov.h (inclua Wbemidl.h)
Biblioteca Wbemuuid.lib
DLL Wmiprvsd.dll

Confira também

Como desenvolver um provedor do WMI

IWbemHiPerfProvider

Transformar um provedor de instância em um provedor de alto desempenho

Provedor de Contadores de Desempenho

Escrever um provedor de instância