Implementazione di una routine di callback IRP di richiesta inattiva USB

Quando viene chiamato MiniportIdleNotification , il driver miniport USB chiama IoCallDriver per emettere un pacchetto di richiesta I/O (IRP) per una richiesta di inattività USB (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION) al driver del bus USB sottostante. Il driver miniport rilascia questo IRP per informare il driver del bus USB che la scheda di rete è inattiva e deve essere sospesa.

Il driver miniport USB deve fornire una routine di callback IRP per la richiesta di inattività USB IRP. Il driver del bus USB chiama questa routine quando determina che la scheda di rete può essere sospesa e passata a uno stato a basso consumo.

Nota Dopo che il driver del bus USB gestisce l'IRP della richiesta di inattività USB, chiama la routine di callback in modo sincrono nel contesto della chiamata a IoCallDriver o in modo asincrono dopo la restituzione di MiniportIdleNotification .

La routine di callback deve solo chiamare NdisMIdleNotificationConfirm per notificare a NDIS che può continuare con la transizione dello stato a basso consumo della scheda di rete. Quando il driver chiama NdisMIdleNotificationConfirm, deve anche specificare lo stato di alimentazione del dispositivo più basso a cui la scheda di rete può passare.

Nel contesto della chiamata a NdisMIdleNotificationConfirm, NDIS esegue i passaggi necessari per eseguire la transizione della scheda di rete a uno stato a basso consumo. Per altre informazioni, vedere Gestione della notifica di inattività selettiva NDIS.

Di seguito è riportato un esempio di routine di callback per un IRP di richiesta inattiva USB.

//
// MiniportUsbIdleRequestCallback()
//
// This is the USB selective suspend idle notification.  All that is 
// needed is to inform NDIS that the USB stack is ready to go to a 
// low-power state.  Be aware that USB devices will always be requested
// to transition to a power state of NdisDeviceStateD2.
//
VOID MiniportUsbIdleRequestCallback(PVOID AdapterContext)
{
    NdisMIdleNotificationConfirm(
        AdapterContext->MiniportAdapterHandle,
        NdisDeviceStateD2
        );

    return;
}

Per altre informazioni sulla routine di callback delle richieste inattive USB, vedere Routine di callback di richiesta inattiva USB.