Partager via


IFunctionDiscoveryNotification ::OnEvent, méthode (functiondiscoveryapi.h)

[La découverte de fonctions peut être utilisée dans les systèmes d’exploitation spécifiés dans la section Configuration requise. Il peut être modifié ou indisponible dans les versions suivantes.]

Reçoit tous les événements d’ajout, de suppression ou de mise à jour pendant une notification.

Syntaxe

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

Paramètres

[in] dwEventID

Type de l'événement.

Valeur Signification
FD_EVENTID_SEARCHCOMPLETE
1 000
La recherche a été effectuée par un fournisseur. En règle générale, cette notification est envoyée par les fournisseurs de protocole réseau où le protocole spécifie un intervalle défini dans lequel les résultats de la recherche seront acceptés. Les fournisseurs WSD et SSDP utilisent ce type d’événement.

Une fois cette notification envoyée, une requête ignore toutes les réponses entrantes à la requête de recherche ou de sonde initiale. Toutefois, la requête surveille toujours les messages Hello ou Bye (utilisés pour indiquer quand un appareil est ajouté ou supprimé). La requête continue de surveiller ces événements jusqu’à ce que Release soit appelé sur l’objet de requête.

Cette notification ne sera pas envoyée si une erreur catastrophique se produit.

Pour plus d’informations sur la façon dont cet événement est implémenté ou utilisé par un fournisseur spécifique, suivez le lien vers la documentation du fournisseur de la rubrique Fournisseurs intégrés .

FD_EVENTID_ASYNCTHREADEXIT
1001
Non utilisé par les clients de découverte de fonction.
FD_EVENTID_SEARCHSTART
1002
Non utilisé par les clients de découverte de fonction.
FD_EVENTID_IPADDRESSCHANGE
1003
L’adresse IP de la carte réseau a changé. Le fournisseur WSD implémente cette notification. Des événements peuvent être envoyés lorsqu’un événement d’alimentation se produit (par exemple, lorsque la machine sort de veille) ou lors de l’itinérance avec un ordinateur portable.
Note Cette valeur n’est pas disponible pour une utilisation sur Windows Vista. Il est disponible sur Windows Vista avec SP1, Windows Server 2008 et les versions ultérieures du système d’exploitation.
 

[in] fdqcQueryContext

Contexte inscrit pour la notification de modification. Le type FDQUERYCONTEXT est défini en tant que DWORDLONG. Ce paramètre peut être NULL.

[in] pszProvider

Nom du fournisseur.

Valeur retournée

L’implémentation par le programme client de la méthode OnEvent doit retourner l’une des valeurs HRESULT suivantes à l’appelant.

Code de retour Description
S_OK
La commande s'est correctement terminée.
E_INVALIDARG
La valeur de l’un des paramètres d’entrée n’est pas valide.

Remarques

Les fournisseurs de découverte de fonctions (SSDP et WSD) utilisent cette méthode pour implémenter des notifications indiquant qu’une passe de recherche est terminée.

N’appelez pas Release sur l’objet de requête à partir de cette méthode. Cela pourrait entraîner un blocage. Si Release est appelé sur un objet de requête à partir d’un autre thread alors qu’un rappel est en cours de traitement, l’objet n’est pas libéré tant que le rappel n’est pas terminé.

Toutes les notifications transmises à la découverte de fonction par les fournisseurs sont mises en file d’attente et retournées au client une par une. Les rappels sont synchronisés afin qu’un client ne reçoive qu’une seule notification à la fois.

Étant donné que d’autres appels de méthode IFunctionDiscoveryNotification peuvent être effectués dans d’autres threads, toutes les modifications apportées à l’état du thread pendant l’appel doivent être restaurées avant de quitter la méthode.

Exemples

L’exemple suivant montre une implémentation de gestionnaire OnEvent. La classe CMyNotificationListener est définie dans la rubrique 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;
} 

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows Vista [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2008 [applications de bureau uniquement]
Plateforme cible Windows
En-tête functiondiscoveryapi.h

Voir aussi

IFunctionDiscoveryNotification