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 inactive et de passer de la carte réseau à un état d’alimentation totale. Lorsque cette fonction est appelée, le pilote miniport doit suivre les étapes suivantes :
Le pilote miniport doit annuler les irps spécifiques au bus qu’il a peut-être émis précédemment pour la notification d’inactivité.
Le pilote miniport appelle NdisMIdleNotificationComplete. Cet appel informe NDIS que la notification inactive a été terminée. NDIS compile ensuite l’opération de suspension sélective en passant la carte réseau à un état plein alimentation.
Par exemple, lorsque MiniportCancelIdleNotification est appelé, le pilote usb miniport appelle IoCancelIrp pour annuler le paquet de demande d’E/S (IRP) pour une requête inactive USB (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION). Le pilote usb miniport a précédemment émis cet 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, il 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.
Notez que le pilote de bus USB peut appeler la routine d’achèvement de façon synchrone dans le contexte de l’appel à IoCancelIrp ou de manière asynchrone après la 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 demande inactive USB, consultez Implémentation d’une routine d’achèvement de demande d’inactivité USB.