Condividi tramite


Metodo IFunctionDiscoveryNotification::OnEvent (functiondiscoveryapi.h)

[L'individuazione delle funzioni è disponibile per l'uso nei sistemi operativi specificati nella sezione Requisiti. Potrebbe essere modificato o non disponibile nelle versioni successive.]

Riceve eventuali eventi di aggiunta, rimozione o aggiornamento durante una notifica.

Sintassi

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

Parametri

[in] dwEventID

Tipo di evento.

Valore Significato
FD_EVENTID_SEARCHCOMPLETE
1000
La ricerca è stata completata da un provider. In genere, questa notifica viene inviata dai provider di protocolli di rete in cui il protocollo specifica un intervallo definito in cui verranno accettati i risultati della ricerca. Entrambi i provider WSD e SSDP usano questo tipo di evento.

Dopo l'invio di questa notifica, una query ignora tutte le risposte in ingresso alla richiesta iniziale di ricerca o probe. Tuttavia, la query monitorerà comunque i messaggi Hello o Bye (usati per indicare quando un dispositivo viene aggiunto o rimosso). La query continuerà a monitorare gli eventi fino a quando Non viene chiamato Release sull'oggetto query.

Questa notifica non verrà inviata se si verifica un errore irreversibile.

Per informazioni su come questo evento viene implementato o usato da un provider specifico, seguire il collegamento alla documentazione del provider dall'argomento Provider predefiniti .

FD_EVENTID_ASYNCTHREADEXIT
1001
Non usato dai client di individuazione delle funzioni.
FD_EVENTID_SEARCHSTART
1002
Non usato dai client di individuazione delle funzioni.
FD_EVENTID_IPADDRESSCHANGE
1003
L'indirizzo IP della scheda di interfaccia di rete è stato modificato. Il provider WSD implementa questa notifica. Gli eventi possono essere inviati quando si verifica un evento di alimentazione (ad esempio, quando il computer si riattiva dalla sospensione) o quando si esegue il roaming con un portatile.
Nota Questo valore non è disponibile per l'uso in Windows Vista. È disponibile in Windows Vista con SP1, Windows Server 2008 e versioni successive del sistema operativo.
 

[in] fdqcQueryContext

Contesto registrato per la notifica delle modifiche. Il tipo FDQUERYCONTEXT è definito come DWORDLONG. Questo parametro può essere NULL.

[in] pszProvider

Nome del provider.

Valore restituito

L'implementazione del programma client del metodo OnEvent deve restituire uno dei valori HRESULT seguenti al chiamante.

Codice restituito Descrizione
S_OK
Metodo completato correttamente.
E_INVALIDARG
Il valore di uno dei parametri di input non è valido.

Commenti

I provider di individuazione delle funzioni (SSDP e WSD) usano questo metodo per implementare le notifiche che un passaggio di ricerca è completo.

Non chiamare Release sull'oggetto query da questo metodo. In questo modo potrebbe verificarsi un deadlock. Se Release viene chiamato su un oggetto query da un altro thread mentre è in corso un callback, l'oggetto non verrà rilasciato fino al termine del callback.

Tutte le notifiche passate all'individuazione delle funzioni da parte dei provider vengono accodate e restituite al client uno alla sola. I callback vengono sincronizzati in modo che un client riceva una sola notifica alla volta.

Poiché è possibile eseguire altre chiamate al metodo IFunctionDiscoveryNotification in altri thread, tutte le modifiche apportate allo stato del thread durante la chiamata devono essere ripristinate prima di uscire dal metodo.

Esempio

Nell'esempio seguente viene illustrata un'implementazione del gestore OnEvent. La classe CMyNotificationListener è definita nell'argomento 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;
} 

Requisiti

Requisito Valore
Client minimo supportato Windows Vista [solo app desktop]
Server minimo supportato Windows Server 2008 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione functiondiscoveryapi.h

Vedi anche

IFunctionDiscoveryNotification