Partager via


Gestion des événements PnP et des événements de gestion de l’alimentation dans un pilote de protocole

Lorsque le système d’exploitation émet un paquet de demande d’E/S Plug-and-Play (PnP) ou un IRP de gestion de l’alimentation sur un objet d’appareil cible qui représente une interface réseau carte (NIC), NDIS intercepte l’IRP. NDIS indique l’événement à chaque pilote de protocole lié et à chaque pilote intermédiaire lié en appelant la fonction ProtocolNetPnPEvent du pilote. Dans l’appel à ProtocolNetPnPEvent, NDIS passe un pointeur vers un NET_PNP_EVENT_NOTIFICATION qui contient une structure NET_PNP_EVENT. La structure NET_PNP_EVENT décrit l’événement PnP ou l’événement de gestion de l’alimentation indiqué. Pour plus d’informations sur l’interface PnP du pilote de protocole, consultez Gestion des notifications d’événements PnP dans un pilote de protocole.

La liste suivante contient les événements PnP et de gestion de l’alimentation, comme indiqué par le code NetEvent dans la structure NET_PNP_EVENT :

  • NetEventSetPower

    Indique une demande Définir l’alimentation, qui spécifie que l’adaptateur miniport doit passer à un état d’alimentation particulier. Un pilote de protocole prenant en charge la gestion de l’alimentation doit toujours réussir cet événement en retournant NDIS_STATUS_SUCCESS. Un ancien pilote de protocole peut retourner NDIS_STATUS_NOT_SUPPORTED pour indiquer que NDIS doit le dissocier de l’adaptateur miniport.

    Après avoir émis la demande d’alimentation définie, NDIS interrompt la pile des pilotes si l’adaptateur miniport passe à un état de faible consommation. NDIS redémarre la pile des pilotes avant la demande set-power si l’adaptateur miniport passe à l’état de fonctionnement (D0). Pour plus d’informations sur la suspension et le redémarrage de la pile de pilotes, consultez Suspension d’une pile de pilotes.

    Si l’adaptateur miniport est dans un état de faible consommation, le pilote de protocole ne peut pas émettre de requêtes OID. Cette exigence est une restriction supplémentaire de gestion de l’alimentation qui est ajoutée aux autres restrictions qui s’appliquent lorsque la pile de pilotes est à l’état Suspendu.

    Si l’adaptateur miniport sous-jacent ne prend pas en charge la gestion de l’alimentation, le pilote miniport définit le membre PowerManagementCapabilities de NDIS_MINIPORT_ADAPTER_GENERAL_ATTRIBUTES sur NULL et NDIS définit le membre PowerManagementCapabilities de NDIS_BIND_PARAMETERS sur NULL.

    Note À compter de NDIS 6.30, après avoir été averti de cet événement, le pilote de protocole doit cesser de générer de nouvelles demandes d’E/S et ne doit pas attendre l’achèvement des demandes d’E/S en attente dans le contexte de l’appel à ProtocolNetPnPEvent.

    Pour plus d’informations sur les événements set-power, consultez Gestion des événements PnP et des événements de gestion de l’alimentation dans un pilote intermédiaire.

  • NetEventQueryPower

    Indique une requête d’alimentation de requête, qui demande si l’adaptateur miniport sous-jacent peut effectuer une transition vers un état d’alimentation particulier. Un pilote de protocole doit toujours réussir un NetEventQueryPower . Après avoir établi une connexion active, un pilote de protocole peut appeler PoRegisterSystemState pour inscrire un état de disponibilité continue. Tant que l’inscription d’état est effective, 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 PoUnregisterSystemState. Un pilote de protocole ne doit jamais essayer d’empêcher le système de passer à l’état de veille en faisant échouer un NetEventQueryRemoveDevice. Notez qu’un NetEventQueryPower est toujours suivi d’un NetEventSetPower. Un NetEventSetPower qui définit l’état d’alimentation actuel de l’appareil en vigueur annule netEventQueryPower.

    Note À compter de NDIS 6.30, après avoir été averti de cet événement, le pilote de protocole ne doit pas attendre l’achèvement des demandes d’E/S en attente dans le contexte de l’appel à ProtocolNetPnPEvent.

  • NetEventQueryRemoveDevice

    Indique une requête de suppression d’appareil de requête, qui demande si la carte réseau peut être supprimée sans interrompre les opérations. 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 faire échouer un NetEventQueryRemoveDevice en retournant NDIS_STATUS_FAILURE.

  • NetEventCancelRemoveDevice

    Indique une demande Annuler la suppression de l’appareil, qui annule la suppression d’une carte réseau sous-jacente. Le pilote de protocole doit toujours réussir cet événement en retournant NDIS_STATUS_SUCCESS.

  • NetEventReconfigure

    Indique que la configuration a changé pour un composant réseau. Par exemple, si un utilisateur modifie l’adresse IP pour TCP/IP, NDIS indique cet événement au protocole TCP/IP avec le code NetEventReconfigure . Le pilote de protocole peut, dans de rares circonstances, retourner un code d’échec s’il n’est pas en mesure d’appliquer les modifications de configuration indiquées et s’il n’existe aucune valeur par défaut disponible. Une tentative d’allocation de mémoire ayant échoué est un exemple de cas dans lequel le protocole retourne un code d’échec. Le renvoi d’un code d’erreur peut entraîner l’invite de l’utilisateur à redémarrer le système.

    Un protocole doit valider les données liées à NetEventReconfigure passées à sa fonction ProtocolNetPnPEvent . Pour plus d’informations sur ces données, consultez NET_PNP_EVENT pour les pilotes de protocole.

  • NetEventBindList

    Indique à un pilote de protocole que son ordre de traitement de liste de liaison a été reconfiguré. Cette liste indique un ordre relatif à appliquer aux liaisons du protocole lors du traitement, par exemple une demande utilisateur qui peut être routée vers l’une des liaisons suivantes. La mémoire tampon passée avec cet événement contient une liste de noms d’appareils mis en forme sous forme de chaînes Unicode terminées par NULL. Le format de chaque nom d’appareil est identique au paramètre DeviceName passé à un appel à ProtocolBindAdapterEx.

    Un protocole doit valider les données liées à NetEventBindList passées à sa fonction ProtocolNetPnPEvent . Pour plus d’informations sur ces données, consultez NET_PNP_EVENT pour les pilotes de protocole.

    Un protocole doit valider les données liées à NetEventBindList passées à sa fonction ProtocolNetPnPEvent . Pour plus d’informations sur ces données, consultez NET_PNP_EVENT pour les pilotes de protocole.

  • NetEventBindsComplete

    Indique qu’un pilote de protocole est lié à toutes les cartes réseau auxquelles il peut se lier. NDIS n’indique plus de liaisons au pilote de protocole, sauf si, par exemple, une carte réseau PnP est connectée au système.

  • NetEventPnPCapabilities

    Indique que l’utilisateur a activé ou désactivé les fonctionnalités de mise en éveil de l’adaptateur sous-jacent. (Le paramètre ProtocolBindingContext que NDIS transmet à ProtocolNetPnPEvent spécifie la liaison.)

  • NetEventPause

    Indique que la liaison de protocole spécifiée doit entrer dans l’étatPaus. La liaison passe à l’état Suspendu une fois que NDIS a terminé toutes les demandes d’envoi en suspens pour la liaison. Pour plus d’informations sur la suspension d’une liaison, consultez Suspension d’une liaison.

  • NetEventRestart

    Indique que la liaison de protocole spécifiée est entrée dans l’état Redémarrage. Une fois que le pilote de protocole est prêt à reprendre les opérations d’envoi et de réception pour la liaison, la liaison passe à l’état En cours d’exécution. Pour plus d’informations sur le redémarrage d’une liaison, consultez Redémarrage d’une liaison.

  • NetEventPortActivation

    Indique l’activation d’une liste de ports associés à la liaison spécifiée. Pour plus d’informations sur la suspension d’une liaison, consultez Gestion de l’événement PnP d’activation de port.

  • NetEventPortDeactivation

    Indique la désactivation d’une liste de ports associés à la liaison spécifiée. Pour plus d’informations sur la suspension d’une liaison, consultez Gestion de l’événement PnP de désactivation de port.

  • NetEventIMReEnableDevice

    Indique que la configuration a changé pour un miniport virtuel d’un pilote intermédiaire NDIS 6.0 ou ultérieur. NetEventIMReEnableDevice est similaire à l’événement NetEventReconfigure , sauf que le pilote intermédiaire reçoit cet événement pour un miniport virtuel unique et que l’événement NetEventReconfigure s’applique à tous les miniports virtuels du pilote intermédiaire. Par exemple, un pilote intermédiaire reçoit l’événement NetEventIMReEnableDevice lorsqu’un utilisateur désactive, puis active un seul miniport virtuel à partir du Gestionnaire de périphériques ou d’une autre source. Pour obtenir des exemples de gestion de l’alimentation des pilotes intermédiaires, consultez l’exemple pilote intermédiaire NDIS MUX et pilote notify object disponible dans le référentiel d’exemples de pilotes Windows sur GitHub.

Le membre Buffer de la structure NET_PNP_EVENT pointe vers une mémoire tampon qui contient des informations spécifiques à l’événement indiqué.

Un pilote de protocole peut terminer l’appel à ProtocolNetPnPEvent de manière asynchrone avec NdisCompleteNetPnPEvent.