Implementando uma rotina de conclusão de IRP de solicitação ociosa usb
Quando MiniportIdleNotification é chamado, o driver de miniporto USB chama IoCallDriver para emitir um IRP (pacote de solicitação de E/S) para uma solicitação ociosa USB (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION) para o driver de ônibus USB subjacente. O driver de miniporta emite esse IRP para informar ao driver de barramento USB que o adaptador de rede está ocioso e deve ser suspenso.
O driver de miniporto USB também deve chamar IoSetCompletionRoutineEx para registrar uma rotina de conclusão para o IRP de solicitação ociosa usb. O motorista do ônibus USB chama a rotina de conclusão quando conclui o IRP depois de ser cancelado pelo driver de miniporta USB. O driver de miniporta USB cancela o IRP quando o NDIS cancela a notificação ociosa chamando MiniportCancelIdleNotification.
A rotina de conclusão só precisa chamar NdisMIdleNotificationComplete para notificar o NDIS de que ele pode continuar com a transição de estado de energia total do adaptador de rede.
Nota A rotina de conclusão deve retornar STATUS_MORE_PROCESSING_REQUIRED se o driver de miniporto USB reutilizar os recursos irp durante outra notificação ociosa do NDIS.
Veja a seguir um exemplo de uma rotina de conclusão para o IRP de solicitação ociosa 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;
}
Para obter mais informações sobre a rotina de retorno de chamada de solicitação ociosa usb, consulte Rotina de conclusão de IRP de solicitação ociosa usb.