Метод IFunctionDiscoveryNotification::OnUpdate (functiondiscoveryapi.h)

[Функция обнаружения доступна для использования в операционных системах, указанных в разделе Требования. Он может быть изменен или недоступен в последующих версиях.]

Указывает, что экземпляр функции был добавлен, удален или изменен. Этот метод реализуется клиентской программой и вызывается функцией обнаружения функций.

Синтаксис

HRESULT OnUpdate(
  [in] QueryUpdateAction enumQueryUpdateAction,
  [in] FDQUERYCONTEXT    fdqcQueryContext,
  [in] IFunctionInstance *pIFunctionInstance
);

Параметры

[in] enumQueryUpdateAction

Значение QueryUpdateAction , указывающее тип действия, выполняемого обнаружением функций для указанного экземпляра функции.

[in] fdqcQueryContext

Контекст, зарегистрированный для уведомления об изменениях. Тип FDQUERYCONTEXT определяется как DWORDLONG. Этот параметр может принимать значение NULL.

[in] pIFunctionInstance

Указатель интерфейса IFunctionInstance , представляющий экземпляр функции, на который влияет обновление.

Возвращаемое значение

Реализация метода OnUpdate в клиентской программе должна возвращать вызывающей стороне одно из следующих значений HRESULT .

Код возврата Описание
S_OK
Метод завершился успешно.
E_INVALIDARG
Недопустимое значение одного из входных параметров.

Комментарии

Не вызывайте Release для объекта запроса из этого метода. Это может привести к взаимоблокировки. Если метод Release вызывается для объекта запроса из другого потока во время обратного вызова, объект не будет освобожден до завершения обратного вызова.

Все уведомления, передаваемые в обнаружение функций поставщиками, помещаются в очередь и возвращаются клиенту по одному. Обратные вызовы синхронизируются таким образом, что клиент будет получать только одно уведомление за раз.

Так как другие вызовы метода IFunctionDiscoveryNotification могут выполняться в других потоках, все изменения, внесенные в состояние потока во время вызова, должны быть восстановлены перед выходом из метода .

Примеры

В следующем коде показана реализация обработчика OnUpdate. Класс CMyNotificationListener определен в разделе IFunctionDiscoveryNotification .

#include <windows.h>

HRESULT STDMETHODCALLTYPE CMyNotificationListener::OnUpdate(
                                          IN QueryUpdateAction Action,
                                          IN FDQUERYCONTEXT fdqcQueryContext,
                                          IN IFunctionInstance *pInstance)
{
    HRESULT hr = S_OK;

    switch (Action) {
    case QUA_ADD:
        SetEvent( m_hAddEvent );
        break;
    case QUA_REMOVE:
        SetEvent( m_hRemoveEvent );
        break;
    case QUA_CHANGE:
        SetEvent( m_hChangeEvent );
        break;
    }
    return S_OK;
}

Требования

Требование Значение
Минимальная версия клиента Windows Vista [только классические приложения]
Минимальная версия сервера Windows Server 2008 [только классические приложения]
Целевая платформа Windows
Header functiondiscoveryapi.h

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

IFunctionDiscoveryNotification