Implementazione di una routine di completamento della richiesta di inattività USB
Quando viene chiamato MiniportIdleNotification , il driver miniport USB chiama IoCallDriver per rilasciare un pacchetto di richiesta I/O per una richiesta di inattività USB (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION) al driver del bus USB sottostante. Il driver miniport rilascia l'IRP per informare il driver del bus USB che la scheda di rete è inattiva e deve essere sospesa.
Il driver miniport USB deve anche chiamare IoSetCompletionRoutineEx per registrare una routine di completamento per l'IRP della richiesta di inattività USB. Il driver del bus USB chiama la routine di completamento quando completa l'IRP dopo l'annullamento dal driver miniport USB. Il driver miniport USB annulla l'IRP quando NDIS annulla la notifica inattiva chiamando MiniportCancelIdleNotification.
La routine di completamento deve chiamare solo NdisMIdleNotificationComplete per notificare a NDIS che può continuare con la transizione dello stato completo della scheda di rete.
Nota La routine di completamento deve restituire STATUS_MORE_PROCESSING_REQUIRED se il driver miniport USB ririuserà le risorse IRP durante un'altra notifica inattiva da NDIS.
Di seguito è riportato un esempio di routine di completamento per l'IRP della richiesta di inattività USB.
//
// MiniportUsbIdleRequestCompletion()
//
// This is the IO_COMPLETION_ROUTINE for the selective suspend IOCTL.
// All that is needed is to inform NDIS that the IdleNotification
// operation is complete.
//
VOID MiniportUsbIdleRequestCompletion(PVOID AdapterContext)
{
NdisMIdleNotificationComplete(Adapter->MiniportAdapterHandle);
// We will be reusing the IRP later, so do not let the IO manager delete it.
return STATUS_MORE_PROCESSING_REQUIRED;
}
Per altre informazioni sulla routine di callback della richiesta di inattività USB, vedere Routine di completamento della richiesta di inattività USB.