Implémentation d’une fonction de gestionnaire MiniportCancelIdleNotification

NDIS appelle la fonction de gestionnaire MiniportCancelIdleNotification du pilote miniport afin d’annuler le processus de notification inactif et de passer la carte réseau à un état de pleine alimentation. Lorsque cette fonction est appelée, le pilote miniport doit suivre les étapes suivantes :

  1. Le pilote miniport doit annuler tous les IRP spécifiques au bus qu’il a émis précédemment pour la notification d’inactivité.

  2. Le pilote miniport appelle NdisMIdleNotificationComplete. Cet appel informe NDIS que la notification d’inactivité a été effectuée. NDIS contrôle ensuite l’opération de suspension sélective en faisant passer la carte réseau à un état d’alimentation totale.

Par exemple, lorsque MiniportCancelIdleNotification est appelé, le pilote miniport USB appelle IoCancelIrp pour annuler le paquet de demandes d’E/S (IRP) pour une demande d’inactivité USB (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION). Le pilote miniport USB a précédemment émis cette IRP dans sa fonction de gestionnaire MiniportIdleNotification . Dès que le pilote de bus USB a annulé l’IRP, il appelle la routine d’achèvement de l’IRP. Lorsque le pilote de bus USB appelle la routine d’achèvement, cela confirme que l’IRP est annulé et que l’appareil peut reprendre à un état d’alimentation complète. Dans le contexte de la routine d’achèvement, le pilote miniport appelle NdisMIdleNotificationComplete.

Note Le pilote de bus USB peut appeler la routine d’achèvement de manière synchrone dans le contexte de l’appel à IoCancelIrp ou de façon asynchrone après le retour de MiniportCancelIdleNotification .

Voici un exemple de fonction de gestionnaire MiniportCancelIdleNotification pour un pilote miniport USB. Cet exemple montre les étapes impliquées dans l’annulation d’un IRP de demande d’inactivité USB.

//
// MiniportCancelIdleNotification()
//
// This routine is called if NDIS has to cancel an idle notification.
// All that is needed is to cancel the selective suspend IRP.
//
VOID MiniportCancelIdleNotification(
    _In_ NDIS_HANDLE MiniportAdapterContext
    )
{
    IoCancelIrp(Adapter->UsbSsIrp);
}

Pour obtenir des instructions sur l’implémentation d’une routine d’achèvement pour un IRP de requête inactive USB, consultez Implémentation d’une routine d’achèvement de la demande d’inactivité USB.