Condividi tramite


Implementazione di una funzione del gestore MiniportCancelIdleNotification

NDIS chiama la funzione del gestore MiniportCancelIdleNotification del driver miniport per annullare il processo di notifica inattiva e passare la scheda di rete a uno stato di alimentazione completa. Quando questa funzione viene chiamata, il driver miniport deve seguire questa procedura:

  1. Il driver miniport deve annullare qualsiasi IRP specifico del bus che potrebbe essere stato emesso in precedenza per la notifica di inattività.

  2. Il driver miniport chiama NdisMIdleNotificationComplete. Questa chiamata notifica all'NDIS che la notifica di inattività è stata completata. NDIS compila quindi l'operazione di sospensione selettiva eseguendo la transizione della scheda di rete a uno stato di alimentazione completa.

Ad esempio, quando viene chiamato MiniportCancelIdleNotification, il driver miniport USB chiama IoCancelIrp per annullare il pacchetto di richiesta di I/O (IRP) per una richiesta di inattività USB (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION). Il driver miniport USB ha precedentemente emesso questo IRP nella sua funzione del gestore MiniportIdleNotification. Non appena il driver del bus USB ha annullato l'IRP, chiama la routine di completamento di IRP. Quando il driver del bus USB chiama la routine di completamento, conferma che l'IRP viene annullato e il dispositivo può riprendere lo stato di alimentazione completa. Nel contesto della routine di completamento, il driver miniport chiama NdisMIdleNotificationComplete.

Nota Il driver del bus USB può chiamare la routine di completamento in modo sincrono nel contesto della chiamata a IoCancelIrp o in modo asincrono dopo la restituzione di MiniportCancelIdleNotification.

Di seguito è riportato un esempio di una funzione del gestore MiniportCancelIdleNotification per un driver miniport USB. In questo esempio vengono illustrati i passaggi necessari per annullare un IRP di richiesta inattiva 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);
}

Per linee guida sull'implementazione di una routine di completamento per un IRP di richiesta inattiva USB, vedere Implementazione di una routine di completamento della richiesta di inattività USB.