Partilhar via


Implementação de uma Rotina de Conclusão de IRP de Pedido Ocioso USB

Quando MiniportIdleNotification é chamado, o driver de miniporta USB chama IoCallDriver para enviar um pacote de requisição de E/S (IRP) para uma solicitação de inatividade USB (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION) ao driver de barramento USB subjacente. O driver de miniporta emite este IRP para informar o driver do bus USB que o adaptador de rede está inativo e deve ser suspenso.

O driver de miniporta USB também deve chamar IoSetCompletionRoutineEx para registar uma rotina de conclusão para o IRP de pedido inativo USB. O driver de barramento USB chama a rotina de conclusão quando conclui o IRP, após este ser cancelado pelo driver de miniporta USB. O driver de miniporta USB cancela o IRP quando a NDIS cancela a notificação de inatividade, chamando MiniportCancelIdleNotification.

A rotina de conclusão só precisa chamar NdisMIdleNotificationComplete para notificar o NDIS de que ele pode continuar com a transição para o estado de plena potência do adaptador de rede.

Nota A rotina de conclusão deve retornar STATUS_MORE_PROCESSING_REQUIRED se o driver de miniporta USB reutilizar os recursos IRP durante outra notificação ociosa do NDIS.

A seguir está um exemplo de uma rotina de conclusão para o pedido USB ocioso IRP.

//
// 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.