Lire en anglais

Partager via


PROTOCOL_NET_PNP_EVENT fonction de rappel (ndis.h)

NDIS appelle la fonction ProtocolNetPnPEvent pour indiquer un événement network Plug-and-Play, un événement NDIS PnP ou un événement de gestion de l’alimentation à un pilote de protocole.

Remarque Vous devez déclarer la fonction à l’aide du type PROTOCOL_NET_PNP_EVENT. Pour plus d’informations, consultez la section Exemples suivants.
 

Syntaxe

PROTOCOL_NET_PNP_EVENT ProtocolNetPnpEvent;

NDIS_STATUS ProtocolNetPnpEvent(
  [in] NDIS_HANDLE ProtocolBindingContext,
  [in] PNET_PNP_EVENT_NOTIFICATION NetPnPEventNotification
)
{...}

Paramètres

[in] ProtocolBindingContext

Handle vers une zone de contexte allouée par le pilote de protocole dans laquelle ce pilote gère les informations d’état d’exécution par liaison. Le pilote de protocole a fourni ce handle lorsqu’il a appelé la fonction NdisOpenAdapterEx. Un événement NetEventXxx indiqué avec un NULLProtocolBindingContext s’applique à toutes les liaisons. NetEventBindList et NetEventBindsComplete sont toujours indiqués avec une NULLProtocolBindingContext. NetEventReconfigure peut être indiqué avec un ProtocolBindingContext spécifié ou avec unProtocolBindingContext NULL.

[in] NetPnPEventNotification

Pointeur vers un NET_PNP_EVENT_NOTIFICATION structure qui décrit l’événement Plug-and-Play ou l’événement Power Management que NDIS indique au pilote de protocole.

Valeur de retour

ProtocolNetPnPEvent peut retourner l’une des options suivantes :

Retourner le code Description
NDIS_STATUS_SUCCESS
Le pilote de protocole a correctement géré l’événement network Plug-and-Play indiqué, l’événement NDIS PnP ou l’événement de gestion de l’alimentation. La signification de ce code d’état dépend du code NetEvent dans la mémoire tampon structure NET_PNP_EVENT_NOTIFICATION à NetPnPEvent:
NetEventSetPower
Le pilote de protocole a effectué toutes les actions spécifiques au pilote requises pour préparer la transition de l’appareil vers l’état d’alimentation de l’appareil demandé.
NetEventQueryPower
L’adaptateur sous-jacent peut passer à l’état d’alimentation de l’appareil demandé.
NetEventQueryRemoveDevice
L’adaptateur sous-jacent peut être supprimé.
NetEventCancelRemoveDevice
Le pilote de protocole a effectué toutes les actions spécifiques au pilote requises pour préparer la suppression annulée de l’adaptateur sous-jacent.
netEventReconfigure
Le pilote de protocole a accepté la configuration modifiée.
netEventBindList
Le pilote de protocole a la nouvelle liste de liaisons et a effectué le traitement associé.
NetEventBindsComplete
Le pilote de protocole a reconnu l’indication de NDIS que le pilote de protocole est lié à toutes les cartes sous-jacentes disponibles.
NetEventPnPCapabilities
Le pilote de protocole a reconnu qu’il a reçu les fonctionnalités de mise en éveil actuelles de l’adaptateur sous-jacent associé à la liaison spécifiée.
NetEventPause
La liaison de protocole spécifiée a entré l’état suspension de. La liaison entrera l’état suspendu une fois que NDIS a terminé toutes les demandes d’envoi en attente pour la liaison. Pour plus d’informations sur les opérations de pause, consultez suspension d’unede liaison.
NetEventRestart
La liaison de protocole spécifiée a entré l’état redémarrage. Une fois que le pilote de protocole est prêt à reprendre les opérations d’envoi et de réception de la liaison, la liaison entre le en cours d’exécution'état.
NetEventPortActivation
Le pilote de protocole a reconnu l’activation d’un port associé à la liaison spécifiée. Pour plus d’informations sur l’activation de port, consultez Activation d’un port NDIS.
netEventPortDeactivation
Le pilote de protocole a reconnu l’activation d’un port associé à la liaison spécifiée.
NDIS_STATUS_PENDING
Le pilote de protocole retourne sa réponse à l’événement indiqué de manière asynchrone avec un appel au fonction NdisCompleteNetPnPEvent.
NDIS_STATUS_RESOURCES
Le pilote de protocole n’a pas pu obtenir les ressources système nécessaires pour satisfaire l’événement Plug-and-Play ou Power Management indiqué.
NDIS_STATUS_NOT_SUPPORTED
Les pilotes de protocole NDIS 6.0 et ultérieurs ne doivent pas retourner cet état. NDIS 5.pilote de protocole x qui ne prend pas en charge Plug-and-Play peut renvoyer cet état en réponse à un NetEventSetPower pour indiquer que NDIS doit le dissocier de l’adaptateur sous-jacent.
NDIS_STATUS_FAILURE
Le pilote de protocole a échoué l’événement indiqué pour des raisons autres que celles indiquées dans la liste précédente.
 

Un pilote de protocole peut échouer les événements NetEventQueryRemoveDevice et NetEventPortActivation.

Si un pilote de protocole échoue à l’événement NetEventPortActivation, il ne doit pas utiliser les ports associés dans les opérations suivantes.

Un pilote de protocole doit toujours réussir le netEventRestart, NetEventIMReEnableDevice, NetEventCancelRemoveDevice, NetEventReconfigure, NetEventBindList, NetEventBindsComplete, NetEventPause, NetEventPortDeactivationet NetEventPnPCapabilities en retournant NDIS_STATUS_SUCCESS.

Remarques

La fonction ProtocolNetPnPEvent est requise dans les pilotes de protocole pour prendre en charge Plug-and-Play et Power Management. NDIS appelle ProtocolNetPnPEvent pour avertir un pilote de protocole qu’un événement Network Plug-and-Play, un événement NDIS PnP ou Power Management s’est produit.

Le NET_PNP_EVENT_NOTIFICATION structure passée à ProtocolNetPnPEvent décrit l’événement. ProtocolNetPnPEvent interprète deux informations de base dans la structure NET_PNP_EVENT_NOTIFICATION :

  • Code dans le membre NetEvent qui identifie le type d’événement Plug-and-Play ou Power Management.
  • Informations spécifiques à l’événement. Par exemple, avec un NetEventSetPower événement, le membre Buffer contient l’état d’alimentation de l’appareil vers lequel l’appareil effectue la transition.
Le pilote de protocole doit enregistrer le pointeur NetPnPEvent. Ce pointeur est un paramètre d’entrée obligatoire pour la fonction NdisCompleteNetPnPEvent, que le pilote de protocole doit appeler par la suite si ProtocolNetPnPEvent retourne NDIS_STATUS_PENDING.

Un pilote de protocole doit toujours réussir un événement NetEventQueryPower. Après avoir établi une connexion active, un pilote de protocole peut appeler la fonction PoRegisterSystemState pour inscrire un état occupé en permanence. Tant que l’inscription de l’état est en vigueur, le gestionnaire d’alimentation ne tente pas de mettre le système en veille. Une fois la connexion inactive, le pilote de protocole annule l’inscription d’état en appelant la fonction PoUnregisterSystemState. Un pilote de protocole ne doit jamais essayer d’empêcher le système de passer à l’état de veille en défaillant un événement NetEventQueryPower. Notez qu’un événement NetEventQueryPower est toujours suivi d’un événement NetEventSetPower. Un événement NetEventSetPower qui spécifie l’état actuel de l’appareil sous-jacent en vigueur annule l’événement NetEventQueryPower.

Si un pilote de protocole ne peut pas libérer un appareil (par exemple, car l’appareil est en cours d’utilisation) il doit échouer à un NetEventQueryRemoveDevice événement en retournant NDIS_STATUS_FAILURE.

Un pilote de protocole doit toujours réussir un NetEventCancelRemoveDevice, un NetEventReconfigure, NetEventBindList, NetEventBindsComplete, NetEventPnPCapabilities, NetEventPauseou NetEventPortDeactivation en retournant NDIS_STATUS_SUCCESS.

Lors de la gestion d’un NetEventReconfigure ou d’un NetEventBindList, un pilote de protocole doit valider les données associées à l’événement. Pour plus d’informations sur ces données, consultez NET_PNP_EVENT_NOTIFICATION.

NDIS appelle ProtocolNetPnPEvent à IRQL = PASSIVE_LEVEL.

exemples de

Pour définir une fonction ProtocolNetPnPEvent, vous devez d’abord fournir une déclaration de fonction qui identifie le type de fonction que vous définissez. Windows fournit un ensemble de types de fonctions pour les pilotes. La déclaration d’une fonction à l’aide des types de fonctions permet d'Analyse du code pour les pilotes, de vérificateur de pilotes statiques (SDV) et d’autres outils de vérification recherchent des erreurs, et il est nécessaire d’écrire des pilotes pour le système d’exploitation Windows.

Par exemple, pour définir une fonction ProtocolNetPnPEvent nommée « MyNetPnPEvent », utilisez le type PROTOCOL_NET_PNP_EVENT comme indiqué dans cet exemple de code :

PROTOCOL_NET_PNP_EVENT MyNetPnPEvent;

Ensuite, implémentez votre fonction comme suit :

_Use_decl_annotations_
NDIS_STATUS
 MyNetPnPEvent(
    NDIS_HANDLE  ProtocolBindingContext,
    PNET_PNP_EVENT_NOTIFICATION  NetPnPEvent
    )
  {...}

Le type de fonction PROTOCOL_NET_PNP_EVENT est défini dans le fichier d’en-tête Ndis.h. Pour identifier plus précisément les erreurs lorsque vous exécutez les outils d’analyse du code, veillez à ajouter l’annotation Use_decl_annotations à votre définition de fonction. L’annotation Use_decl_annotations garantit que les annotations appliquées au type de fonction PROTOCOL_NET_PNP_EVENT dans le fichier d’en-tête sont utilisées. Pour plus d’informations sur la configuration requise pour les déclarations de fonction, consultez Déclaration de fonctions à l’aide de types de rôles de fonction pour les pilotes NDIS.

Pour plus d’informations sur Use_decl_annotations, consultez annoter le comportement de la fonction.

Exigences

Exigence Valeur
client minimum pris en charge Prise en charge dans NDIS 6.0 et versions ultérieures.
plateforme cible Windows
d’en-tête ndis.h (include Ndis.h)
IRQL PASSIVE_LEVEL

Voir aussi

NET_PNP_EVENT_NOTIFICATION

NdisCompleteNetPnPEvent

NdisOpenAdapterEx

PoRegisterSystemState

PoUnregisterSystemState