Поделиться через


Метод IWbemHiPerfProvider::CreateRefreshableObject (wbemprov.h)

Метод IWbemHiPerfProvider::CreateRefreshableObject запрашивает обновляемый объект экземпляра. Средство обновления WMI вызывает IWbemHiPerfProvider::CreateRefreshableObject в ответ на запрос клиента к интерфейсам IWbemConfigureRefresher::AddObjectByPath или IWbemConfigureRefresher::AddObjectByTemplate . Поставщик считывает ключ из предоставленного объекта шаблона и предоставляет объект в параметре ppRefreshable , который будет обновляться при каждом вызове метода refresh в pRefresher . Поставщик связывает обновляемый объект с предоставленным средством обновления, полученным из предыдущего вызова 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
Header wbemprov.h (включая Wbemidl.h)
Библиотека Wbemuuid.lib
DLL Wmiprvsd.dll

См. также раздел

Разработка поставщика WMI

IWbemHiPerfProvider

Преобразование поставщика экземпляра в поставщик High-Performance

Поставщик счетчиков производительности

Написание поставщика экземпляров