Cancelación de la notificación de suspensión inactiva selectiva de NDIS
Si el adaptador de red deja de estar inactivo durante un período de tiempo de espera de inactividad, NDIS inicia la operación de suspensión selectiva. A través de esta operación, el adaptador de red pasa a un estado de baja potencia. NDIS inicia esta operación mediante la emisión de una notificación inactiva al controlador de miniporte. Para obtener más información sobre esta operación, consulte Control de la notificación de suspensión inactiva selectiva de NDIS.
NDIS llama a la función de controlador MiniportIdleNotification para notificar al controlador que el adaptador de red subyacente parece estar inactivo. Una vez emitida la notificación de inactividad, NDIS cancela una notificación inactiva pendiente si se cumplen una o varias de las condiciones siguientes:
Un protocolo o un controlador de filtro excesivo emite una solicitud de paquete de envío o una solicitud de identificador de objeto (OID) al controlador de minipuerto.
Para obtener más información sobre cómo NDIS cancela la notificación de inactividad para este escenario, vea Cancelar la notificación de inactividad debido a la actividad excesiva del controlador.
El adaptador subyacente señala un evento de reactivación, como recibir un paquete o detectar un cambio en su estado de conexión multimedia.
Para obtener más información sobre cómo NDIS cancela la notificación de inactividad para este escenario, vea Cancelar la notificación inactiva debido a eventos de reactivación.
NDIS cancela la notificación inactiva llamando a la función de controlador MiniportCancelIdleNotification del controlador de miniporte subyacente. Cuando se llama a esta función, el controlador de minipuerto debe completar la notificación inactiva para reanudar el adaptador a un estado de alimentación completa. Para obtener instrucciones sobre este proceso, consulte Finalización de la notificación de suspensión inactiva selectiva de NDIS.
Para obtener más información sobre cómo implementar la función de controlador MiniportCancelIdleNotification, vea Implementación de una función de controlador MiniportCancelIdleNotification.
Cancelación de la notificación de inactividad debido a la actividad del controlador excesiva
Los monitores NDIS envían solicitudes y solicitudes de OID que se emiten a un controlador de minipuerto cuyo adaptador de red se ha suspendido y está en un estado de bajo consumo. Cuando esto sucede, NDIS cancela la notificación de inactividad pendiente para que el adaptador de red pueda reanudarse a un estado de energía completa.
NDIS y el controlador de minipuerto siguen estos pasos cuando se cancela una notificación inactiva:
NDIS llama a la función de controlador MiniportCancelIdleNotification para cancelar una notificación inactiva pendiente. Cuando se llama a esta función de controlador, el controlador de minipuerto debe cancelar los paquetes de solicitud de E/S (IRP) específicos del bus que se hayan emitido previamente para la notificación inactiva.
Por ejemplo, cuando se llama a MiniportCancelIdleNotification , el miniporte para un adaptador de red USB realiza los pasos siguientes:
El controlador de minipuerto cancela el IRP de solicitud de inactividad USB pendiente (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION). El controlador de minipuerto emitió este IRP al controlador de bus USB subyacente cuando NDIS llamó a la función MiniportIdleNotification del controlador. El controlador de minipuerto cancela este IRP llamando a IoCancelIrp.
Cuando el controlador de autobús cancela el IRP de solicitud inactiva USB, llama a la rutina de finalización del controlador de miniporte para irP. Esta llamada notifica al controlador que se ha completado el IRP y el adaptador de red puede pasar a un estado de energía completa. Desde el contexto de la rutina de finalización, el controlador llama a NdisMIdleNotificationComple Para notificar a NDIS que el adaptador de red se puede pasar a un estado de energía completa.
Nota Dependiendo de las dependencias para cancelar solicitudes inactivas específicas del bus, el controlador de miniporta llama a NdisMIdleNotificationComple de forma sincrónica en el contexto de la llamada a MiniportCancelIdleNotification o de forma asincrónica después de que miniportCancelIdleNotification devuelva.
Para obtener más información sobre cómo implementar una rutina de finalización de IRP de solicitud inactiva USB, consulte Implementación de una rutina de finalización de IRP de solicitud inactiva USB.
Después de que el controlador de miniporte cancele las IRP específicas del bus para la notificación inactiva, llama a NdisMIdleNotificationCompleTe. Esta llamada notifica al NDIS que se ha completado la notificación inactiva. A continuación, NDIS completa la operación de suspensión selectiva mediante la transición del adaptador de red a un estado de alimentación completa.
Cuando se llama a NdisMIdleNotificationComplete , NDIS realiza los pasos siguientes:
Problemas de NDIS IRP_MN_SET_POWER al controlador de autobús subyacente. Este IRP solicita al controlador de bus que establezca el estado de alimentación del adaptador de red en PowerDeviceD0.
NDIS emite una solicitud de conjunto de OID de OID_PNP_SET_POWER al controlador de minipuerto. En esta solicitud de OID, NDIS especifica que el adaptador de red ahora está realizando la transición a un estado de energía completa de NdisDeviceStateD0.
Cuando controla esta solicitud de conjunto de OID, el controlador prepara el adaptador para una operación de alimentación completa. Esto incluye la restauración de los motores de recepción y envío al mismo estado que estaban antes de la transición al estado de baja potencia. A continuación, el controlador completa la solicitud de OID con NDIS_STATUS_SUCCESS.
En la ilustración siguiente se muestran los pasos implicados cuando NDIS cancela una notificación inactiva que se emitió a un controlador de minipuerto para un adaptador de red USB.
Cancelación de la notificación inactiva debido a eventos de reactivación
Antes de que el adaptador de red pase a un estado de bajo consumo, NDIS emite una solicitud de conjunto de OID de OID_PM_PARAMETERS al adaptador de red. Esta solicitud de OID especifica los tipos de eventos de reactivación que el adaptador puede indicar para reanudar el estado de energía completa. Para la suspensión selectiva de NDIS, el adaptador está configurado para indicar cualquiera de los siguientes eventos de reactivación:
Recepción de un paquete que coincide con un filtro que se configuró anteriormente a través de una solicitud de conjunto de OID de OID_PM_ADD_WOL_PATTERN o OID_GEN_CURRENT_PACKET_FILTER.
Cambio en el estado de conexión multimedia en el adaptador.
NDIS y el controlador de minipuerto siguen estos pasos cuando NDIS cancela una notificación inactiva debido a una señal de reactivación generada por el adaptador de red:
El controlador de bus completa el IRP_MN_WAIT_WAKE emitido por NDIS antes de pasar el adaptador a un estado de bajo consumo. Al completar el IRP, el controlador de autobús notifica al NDIS que el adaptador de red ha generado una señal de reactivación.
NDIS llama a la función de controlador MiniportCancelIdleNotification para iniciar la operación de cancelar la notificación inactiva. Los pasos que intervienen en esta operación son los mismos que se describen en Cancelar la notificación inactiva debido a la actividad excesiva del controlador.
Por ejemplo, en la ilustración siguiente se muestran los pasos implicados cuando NDIS cancela una notificación inactiva debido a un evento de reactivación señalado por un adaptador de red USB.