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

[La detección de funciones está disponible para su uso en los sistemas operativos especificados en la sección Requisitos. Puede modificarse o no estar disponible en versiones posteriores.

Recibe eventos de adición, eliminación o actualización durante una notificación.

Sintaxis

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

Parámetros

[in] dwEventID

Tipo del evento.

Valor Significado
FD_EVENTID_SEARCHCOMPLETE
1000
Un proveedor completó la búsqueda. Normalmente, los proveedores de protocolos de red envían esta notificación, donde el protocolo especifica un intervalo definido en el que se aceptarán los resultados de búsqueda. Tanto los proveedores WSD como SSDP usan este tipo de evento.

Una vez enviada esta notificación, una consulta omite todas las respuestas entrantes a la solicitud inicial de búsqueda o sondeo. Sin embargo, la consulta seguirá supervisando los mensajes Hello o Bye (que se usan para indicar cuándo se agrega o quita un dispositivo). La consulta seguirá supervisando estos eventos hasta que se llame a Release en el objeto de consulta.

Esta notificación no se enviará si se produce un error catastrófico.

Para obtener información sobre cómo un proveedor específico implementa o usa este evento, siga el vínculo a la documentación del proveedor del tema Proveedores integrados .

FD_EVENTID_ASYNCTHREADEXIT
1001
Los clientes de detección de funciones no los usan.
FD_EVENTID_SEARCHSTART
1002
Los clientes de detección de funciones no los usan.
FD_EVENTID_IPADDRESSCHANGE
1003
La dirección IP de la NIC ha cambiado. El proveedor WSD implementa esta notificación. Los eventos se pueden enviar cuando se produce un evento de alimentación (por ejemplo, cuando la máquina se reactiva de suspensión) o cuando se mueve con un portátil.
Nota Este valor no está disponible para su uso en Windows Vista. Está disponible en Windows Vista con SP1, Windows Server 2008 y versiones posteriores del sistema operativo.
 

[in] fdqcQueryContext

Contexto registrado para la notificación de cambios. El tipo FDQUERYCONTEXT se define como DWORDLONG. Este parámetro puede ser NULL.

[in] pszProvider

Nombre del proveedor.

Valor devuelto

La implementación del programa cliente del método OnEvent debe devolver uno de los siguientes valores HRESULT al autor de la llamada.

Código devuelto Descripción
S_OK
El método se completó correctamente.
E_INVALIDARG
El valor de uno de los parámetros de entrada no es válido.

Comentarios

Los proveedores de detección de funciones (SSDP y WSD) usan este método para implementar notificaciones que se completan los pasos de búsqueda.

No llame a Release en el objeto de consulta desde este método. Si lo hace, podría provocar un interbloqueo. Si se llama a Release en un objeto de consulta de otro subproceso mientras una devolución de llamada está en proceso, el objeto no se liberará hasta que finalice la devolución de llamada.

Todas las notificaciones que se pasan a la detección de funciones por parte de los proveedores se ponen en cola y se devuelven al cliente una por una. Las devoluciones de llamada se sincronizan para que un cliente solo reciba una notificación cada vez.

Dado que se pueden realizar otras llamadas al método IFunctionDiscoveryNotification en otros subprocesos, los cambios realizados en el estado del subproceso durante la llamada deben restaurarse antes de salir del método.

Ejemplos

En el ejemplo siguiente se muestra una implementación del controlador OnEvent. La clase CMyNotificationListener se define en el tema 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 Value
Cliente mínimo compatible Windows Vista [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2008 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado functiondiscoveryapi.h

Consulte también

IFunctionDiscoveryNotification