Implementando uma função de manipulador MiniportCancelIdleNotification

O NDIS chama a função de manipulador MiniportCancelIdleNotification do driver de miniport para cancelar o processo de notificação ociosa e fazer a transição do adaptador de rede para um estado de energia total. Quando essa função é chamada, o driver de miniporta deve seguir estas etapas:

  1. O driver de miniporta deve cancelar todos os IRPs específicos do barramento que ele possa ter emitido anteriormente para a notificação ociosa.

  2. O driver de miniporto chama NdisMIdleNotificationComplete. Essa chamada notifica o NDIS de que a notificação ociosa foi concluída. Em seguida, o NDIS compõe a operação de suspensão seletiva fazendo a transição do adaptador de rede para um estado de energia total.

Por exemplo, quando MiniportCancelIdleNotification é chamado, o driver de miniporto USB chama IoCancelIrp para cancelar o IRP (pacote de solicitação de E/S) para uma solicitação ociosa USB (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION). O driver de miniporta USB emitiu anteriormente esse IRP em sua função de manipulador MiniportIdleNotification . Assim que o motorista do ônibus USB cancelou o IRP, ele chama a rotina de conclusão do IRP. Quando o motorista do barramento USB chama a rotina de conclusão, ele confirma que o IRP foi cancelado e o dispositivo pode retomar para um estado de energia total. No contexto da rotina de conclusão, o driver de miniporto chama NdisMIdleNotificationComplete.

Nota O driver de barramento USB pode chamar a rotina de conclusão de forma síncrona no contexto da chamada para IoCancelIrp ou de forma assíncrona após o retorno de MiniportCancelIdleNotification .

Veja a seguir um exemplo de uma função de manipulador MiniportCancelIdleNotification para um driver de miniporto USB. Este exemplo mostra as etapas envolvidas com o cancelamento de um IRP de solicitação ociosa 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);
}

Para obter diretrizes sobre como implementar uma rotina de conclusão para um IRP de solicitação ociosa USB, consulte Implementando uma rotina de conclusão de IRP de solicitação ociosa USB.