Compartilhar via


Método IFunctionDiscoveryNotification::OnEvent (functiondiscoveryapi.h)

[A Descoberta de Funções está disponível para uso nos sistemas operacionais especificados na seção Requisitos. Ele pode estar alterado ou indisponível em versões subsequentes.]

Recebe qualquer adicionar, remover ou atualizar eventos durante uma notificação.

Sintaxe

HRESULT OnEvent(
  [in] DWORD          dwEventID,
  [in] FDQUERYCONTEXT fdqcQueryContext,
  [in] const WCHAR    *pszProvider
);

Parâmetros

[in] dwEventID

O tipo do evento.

Valor Significado
FD_EVENTID_SEARCHCOMPLETE
1000
A pesquisa foi concluída por um provedor. Normalmente, essa notificação é enviada por provedores de protocolo de rede em que o protocolo especifica um intervalo definido no qual os resultados da pesquisa serão aceitos. Os provedores WSD e SSDP usam esse tipo de evento.

Depois que essa notificação é enviada, uma consulta ignora todas as respostas de entrada para a solicitação inicial de pesquisa ou investigação. No entanto, a consulta ainda monitorará mensagens Hello ou Bye (usadas para indicar quando um dispositivo é adicionado ou removido). A consulta continuará monitorando esses eventos até que Release seja chamado no objeto de consulta.

Essa notificação não será enviada se ocorrer um erro catastrófico.

Para obter informações sobre como esse evento é implementado ou usado por um provedor específico, siga o link para a documentação do provedor do tópico Provedores Internos.

FD_EVENTID_ASYNCTHREADEXIT
1001
Não usado por clientes de Descoberta de Funções.
FD_EVENTID_SEARCHSTART
1002
Não usado por clientes de Descoberta de Funções.
FD_EVENTID_IPADDRESSCHANGE
1003
O endereço IP da NIC foi alterado. O provedor WSD implementa essa notificação. Os eventos podem ser enviados quando ocorre um evento de energia (por exemplo, quando o computador acorda da suspensão) ou ao fazer roaming com um laptop.
Nota Esse valor não está disponível para uso no Windows Vista. Ele está disponível no Windows Vista com SP1, Windows Server 2008 e versões subsequentes do sistema operacional.
 

[in] fdqcQueryContext

O contexto registrado para notificação de alteração. O tipo FDQUERYCONTEXT é definido como um DWORDLONG. Este parâmetro pode ser NULL.

[in] pszProvider

O nome do provedor.

Retornar valor

A implementação do programa cliente do método OnEvent deve retornar um dos seguintes valores HRESULT para o chamador.

Código de retorno Descrição
S_OK
O método foi concluído com sucesso.
E_INVALIDARG
O valor de um dos parâmetros de entrada é inválido.

Comentários

Os provedores de Descoberta de Funções (SSDP e WSD) usam esse método para implementar notificações de que uma passagem de pesquisa foi concluída.

Não chame Release no objeto de consulta desse método. Fazer isso pode causar um deadlock. Se Release for chamado em um objeto de consulta de outro thread enquanto um retorno de chamada estiver em processo, o objeto não será liberado até que o retorno de chamada seja concluído.

Todas as notificações passadas para a Descoberta de Funções por provedores são enfileiradas e retornadas ao cliente uma a uma. Os retornos de chamada são sincronizados para que um cliente receba apenas uma notificação por vez.

Como outras chamadas de método IFunctionDiscoveryNotification podem ser feitas em outros threads, todas as alterações feitas no estado do thread durante a chamada devem ser restauradas antes de sair do método.

Exemplos

O exemplo a seguir mostra uma implementação do manipulador OnEvent. A classe CMyNotificationListener é definida no tópico IFunctionDiscoveryNotification .

#include <windows.h>

HRESULT CMyNotificationListener::OnEvent(
                                         IN DWORD dwEventID,
                                         IN FDQUERYCONTEXT fdqcQueryContext,
                                         IN const WCHAR * pszProvider
                                         )
{
    HRESULT hr = S_OK;
    HANDLE hSearchComplete = INVALID_HANDLE_VALUE;
    hSearchComplete = OpenEventW( EVENT_ALL_ACCESS, 
                                  FALSE, 
                                  L"SearchComplete" );
    
    if( NULL == hSearchComplete )
    {
        return hr;
    }

    if( FD_EVENTID_SEARCHCOMPLETE == dwEventID )
    {
        SetEvent( hSearchComplete );
    }

    CloseHandle( hSearchComplete );
    
    return hr;
} 

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows Vista [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2008 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho functiondiscoveryapi.h

Confira também

IFunctionDiscoveryNotification