PROTOCOL_NET_PNP_EVENT fonction de rappel (ndis.h)
NDIS appelle la fonction ProtocolNetPnPEvent pour indiquer un événement de Plug-and-Play réseau, un événement PnP NDIS ou un événement de gestion de l’alimentation à un pilote de protocole.
Syntaxe
PROTOCOL_NET_PNP_EVENT ProtocolNetPnpEvent;
NDIS_STATUS ProtocolNetPnpEvent(
[in] NDIS_HANDLE ProtocolBindingContext,
[in] PNET_PNP_EVENT_NOTIFICATION NetPnPEventNotification
)
{...}
Paramètres
[in] ProtocolBindingContext
Handle d’une zone de contexte allouée par le pilote de protocole dans laquelle ce pilote conserve 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 protocole NULLBindingContext s’applique à toutes les liaisons. NetEventBindList et NetEventBindsComplete sont toujours indiqués avec un protocole NULLBindingContext. NetEventReconfigure peut être indiqué avec un ProtocoleBindingContext spécifié ou avec un Protocole NULLBindingContext.
[in] NetPnPEventNotification
Pointeur vers un NET_PNP_EVENT_NOTIFICATION structure qui décrit l’événement Plug-and-Play ou l’événement de gestion de l’alimentation que NDIS indique au pilote de protocole.
Valeur retournée
ProtocolNetPnPEvent peut retourner l’un des éléments suivants :
Code de retour | Description |
---|---|
|
Le pilote de protocole a correctement géré l’événement de Plug-and-Play réseau indiqué, l’événement PnP NDIS ou l’événement de gestion de l’alimentation. La signification de ce code status dépend du code NetEvent dans la mise en mémoire tampon NET_PNP_EVENT_NOTIFICATION structure sur NetPnPEvent :
|
|
Le pilote de protocole retourne sa réponse à l’événement indiqué de manière asynchrone avec un appel à Fonction NdisCompleteNetPnPEvent . |
|
Le pilote de protocole n’a pas pu obtenir les ressources système nécessaires pour répondre à l’événement Plug-and-Play ou gestion de l’alimentation indiqué. |
|
Les pilotes de protocole NDIS 6.0 et versions ultérieures ne doivent pas retourner cette status. NDIS 5. X pilote de protocole qui ne prend pas en charge Plug-and-Play peut retourner cette status en réponse à un NetEventSetPower pour indiquer que NDIS doit le dissocier de l’adaptateur sous-jacent. |
|
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 faire échouer les événements NetEventQueryRemoveDevice et NetEventPortActivation .
Si un pilote de protocole échoue à l’événement NetEventPortActivation , il ne doit pas utiliser de ports associés dans les opérations suivantes.
Un pilote de protocole doit toujours réussir les événements NetEventRestart, NetEventIMReEnableDevice, NetEventCancelRemoveDevice, NetEventReconfigure, NetEventBindList, NetEventBindsComplete, NetEventPause, NetEventPortDeactivation et 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 la gestion de l’alimentation. NDIS appelle ProtocolNetPnPEvent pour notifier un pilote de protocole qu’un événement de Plug-and-Play réseau, un événement PnP NDIS ou un événement De gestion de l’alimentation s’est produit.
The 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 événement NetEventSetPower , le membre Buffer contient l’état d’alimentation de l’appareil vers lequel l’appareil effectue la transition.
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 d’é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 échouant 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 d’alimentation 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, parce que l’appareil est en cours d’utilisation), il doit échouer un événement NetEventQueryRemoveDevice en retournant NDIS_STATUS_FAILURE.
Un pilote de protocole doit toujours réussir un NetEventCancelRemoveDevice, un NetEventReconfigure, NetEventBindList, NetEventBindsComplete, NetEventPnPCapabilities, NetEventPause ou 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
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 fonction permet à l’analyse du code pour les pilotes, le vérificateur de pilotes statique (SDV) et d’autres outils de vérification de trouver les erreurs, et il s’agit d’une exigence pour l’écriture de 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 lors de l’exécution des 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 Annotating Function Behavior.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Pris en charge dans NDIS 6.0 et versions ultérieures. |
Plateforme cible | Windows |
En-tête | ndis.h (inclure Ndis.h) |
IRQL | PASSIVE_LEVEL |