Implementación de una función de controlador MiniportCancelIdleNotification
NDIS llama a la función del controlador MiniportCancelIdleNotification del controlador de miniporte para cancelar el proceso de notificación inactiva y realizar la transición del adaptador de red a un estado de energía completa. Cuando se llama a esta función, el controlador de miniport debe seguir estos pasos:
El controlador de miniport debe cancelar las IRP específicas del bus que puedan haber emitido previamente para la notificación inactiva.
El controlador de minipuerto llama a NdisMIdleNotificationComplete. Esta llamada notifica a NDIS que se ha completado la notificación inactiva. A continuación, NDIS compila la operación de suspensión selectiva mediante la transición del adaptador de red a un estado de energía completa.
Por ejemplo, cuando se llama a MiniportCancelIdleNotification, el controlador de miniport usb llama a IoCancelIrp para cancelar el paquete de solicitud de E/S (IRP) para una solicitud inactiva USB (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION). El controlador de minipuerto USB emitió anteriormente este IRP en su función de controlador MiniportIdleNotification. En cuanto el controlador del bus USB canceló el IRP, llama a la rutina de finalización del IRP. Cuando el controlador de bus USB llama a la rutina de finalización, confirma que el IRP se cancela y el dispositivo puede reanudarse a un estado de energía completa. En el contexto de la rutina de finalización, el controlador de miniporta llama a NdisMIdleNotificationComplete.
Nota El controlador de bus USB puede llamar a la rutina de finalización de forma sincrónica en el contexto de la llamada a IoCancelIrp o de forma asincrónica después de que se devuelva MiniportCancelIdleNotification.
A continuación se muestra un ejemplo de una función de controlador MiniportCancelIdleNotification para un controlador de minipuerto USB. En este ejemplo se muestran los pasos implicados en la cancelación de una solicitud de inactividad USB IRP.
//
// 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 obtener instrucciones sobre cómo implementar una rutina de finalización para un IRP de solicitud inactiva USB, consulte Implementación de una rutina de finalización de IRP de solicitud inactiva USB.