Fin de la notification de suspension sélective NDIS inactive

NDIS appelle la fonction de gestionnaire MiniportIdleNotification pour avertir le pilote que la carte réseau sous-jacente semble inactive. Pour plus d’informations sur cette opération, consultez Gestion de la notification d’inactivité de suspension sélective NDIS.

Une fois la notification d’inactivité émise, le pilote miniport effectue la notification de suspension sélective du mode d’inactivité NDIS dans les conditions suivantes :

  • NDIS annule la notification d’inactivité en appelant la fonction de gestionnaire MiniportCancelIdleNotification du pilote miniport sous-jacent.

  • Le pilote miniport termine la notification d’inactivité elle-même. Les raisons de cette opération sont spécifiques à la conception et aux exigences du pilote et de l’adaptateur. Par exemple, le pilote peut terminer la notification d’inactivité s’il détecte une activité de réception sur la carte réseau.

Note Le pilote miniport ne peut pas annuler explicitement la notification d’inactivité. Lorsque NDIS annule la notification d’inactivité, le pilote miniport doit terminer la notification comme décrit dans cette rubrique. Pour plus d’informations, consultez Annulation de la notification d’inactivité de suspension sélective NDIS.

Dans les deux cas, le pilote miniport doit remplir la notification d’inactivité pour que l’adaptateur reprenne son état d’alimentation totale. Pour terminer la notification d’inactivité, le pilote miniport doit annuler tous les paquets de demandes d’E/S spécifiques au bus (IRPs) qu’il a pu émettre précédemment pour la notification inactive. Enfin, le pilote appelle NdisMIdleNotificationComplete pour informer NDIS que la carte réseau peut être convertie à un état d’alimentation totale.

Par exemple, le pilote miniport d’une carte réseau USB effectue une notification inactive en procédant comme suit :

  1. Le pilote miniport annule la demande d’inactivité USB en attente (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION) IRP. Le pilote miniport a précédemment émis cette IRP au pilote de bus USB sous-jacent lorsque NDIS a appelé la fonction MiniportIdleNotification du pilote. Le pilote miniport annule cette IRP en appelant IoCancelIrp.

  2. Lorsque le pilote de bus annule l’IRP de la demande d’inactivité USB, il appelle la routine d’achèvement du pilote miniport pour l’IRP. Cet appel avertit le pilote que l’IRP est terminé et que la carte réseau peut passer à un état plein régime. À partir du contexte de la routine d’achèvement, le pilote appelle NdisMIdleNotificationComplete pour informer NDIS que la carte réseau peut être convertie à un état d’alimentation totale.

    Pour plus d’informations sur l’implémentation d’une routine d’exécution IRP de requête inactive USB, consultez Implémentation d’une routine d’achèvement IRP de demande d’inactivité USB.

Note En fonction des dépendances permettant d’annuler les demandes inactives spécifiques au bus, le pilote miniport appelle NdisMIdleNotificationComplete de manière synchrone dans le contexte de l’appel à MiniportCancelIdleNotification ou de façon asynchrone après le retour de MiniportCancelIdleNotification .

Une fois que le pilote miniport annule tous les IIP spécifiques au bus pour la notification d’inactivité, il appelle NdisMIdleNotificationComplete. Cet appel avertit NDIS que la notification d’inactivité a été terminée. NDIS termine ensuite l’opération de suspension sélective en faisant passer la carte réseau à un état d’alimentation totale.

Lorsque NdisMIdleNotificationComplete est appelé, NDIS effectue les étapes suivantes :

  1. Les problèmes NDIS IRP_MN_SET_POWER au pilote de bus sous-jacent. Cette IRP demande au pilote de bus de définir l’état d’alimentation de la carte réseau sur PowerDeviceD0.

  2. NDIS émet une demande d’ensemble d’identificateur d’objet (OID) de OID_PNP_SET_POWER au pilote miniport. Dans cette requête OID, NDIS spécifie que la carte réseau passe maintenant à un état d’alimentation totale de NdisDeviceStateD0.

    Lorsqu’il gère cette demande de jeu d’OID, le pilote prépare l’adaptateur pour un fonctionnement à pleine puissance. Cela inclut la restauration des moteurs de réception et d’envoi à l’état où ils se trouvaient avant la transition vers l’état de faible puissance. Le pilote termine ensuite la requête OID avec NDIS_STATUS_SUCCESS.

La figure suivante montre les étapes qui sont impliquées lorsque le pilote miniport effectue une notification d’inactivité pour une carte réseau USB.

Diagramme illustrant les étapes nécessaires à l’exécution d’une notification d’inactivité pour une carte réseau USB.

Note Lorsque le pilote miniport termine une notification d’inactivité, il ne doit pas appeler NdisMIdleNotificationConfirm pour une notification inactive qui a été effectuée précédemment par le biais d’un appel à NdisMIdleNotificationComplete.