Finalización de la notificación de suspensión inactiva selectiva de NDIS
NDIS llama a la función del controlador MiniportIdleNotification para notificar al controlador que el adaptador de red subyacente parece estar inactivo. Para obtener más información sobre esta operación, vea Control de la notificación de suspensión inactiva selectiva de NDIS.
Una vez emitida la notificación de inactividad, el controlador de minipuerto completa la notificación de suspensión selectiva de suspensión inactiva de NDIS en las condiciones siguientes:
NDIS cancela la notificación inactiva llamando a la función de controlador MiniportCancelIdleNotification del controlador de miniporte subyacente.
El controlador de minipuerto completa la notificación inactiva. Las razones para hacerlo son específicas del diseño y los requisitos del controlador y el adaptador. Por ejemplo, el controlador podría completar la notificación inactiva si detecta la actividad de recepción en el adaptador de red.
Nota El controlador de minipuerto no puede cancelar explícitamente la notificación inactiva. Cuando NDIS cancela la notificación inactiva, el controlador de minipuerto debe completar la notificación como se describe en este tema. Para obtener más información, consulte Cancelación de la notificación de suspensión inactiva selectiva de NDIS.
En cualquier caso, el controlador de minipuerto debe completar la notificación inactiva para reanudar el adaptador a un estado de energía completa. Para completar la notificación inactiva, el controlador de minipuerto debe cancelar los paquetes de solicitud de E/S (IRP) específicos del bus que pueda haber emitido previamente para la notificación inactiva. Por último, el controlador llama a NdisMIdleNotificationComple para notificar a NDIS que el adaptador de red se puede pasar a un estado de energía completa.
Por ejemplo, el controlador de minipuerto para un adaptador de red USB completa una notificación inactiva siguiendo estos pasos:
El controlador de minipuerto cancela el IRP de solicitud de inactividad USB pendiente (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION). El controlador de minipuerto emitió anteriormente 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 mediante una llamada a IoCancelIrp.
Cuando el controlador de bus 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 NdisMIdleNotificationComplete para notificar a NDIS que el adaptador de red se puede pasar a un estado de energía completa.
Para obtener más información sobre cómo implementar una rutina de finalización irP de solicitud inactiva USB, consulte Implementación de una rutina de finalización irP de solicitud inactiva USB.
Nota Según las dependencias para cancelar solicitudes inactivas específicas de 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.
Después de que el controlador de minipuerto cancele los IRP específicos del bus para la notificación inactiva, llama a NdisMIdleNotificationComplete. Esta llamada notifica a NDIS que se ha completado la notificación inactiva. DESPUÉS, 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 bus 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 identificador de objeto (OID) de OID_PNP_SET_POWER al controlador de minipuerto. En esta solicitud de OID, NDIS especifica que el adaptador de red está realizando la transición a un estado de potencia completa de NdisDeviceStateD0.
Cuando controla esta solicitud de conjunto de OID, el controlador prepara el adaptador para la operación de energía completa. Esto incluye la restauración de los motores de recepción y envío al mismo estado en el 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 el controlador de minipuerto completa una notificación inactiva para un adaptador de red USB.
Nota Cuando el controlador de minipuerto completa una notificación inactiva, no debe llamar a NdisMIdleNotificationConfirm para una notificación inactiva que se completó anteriormente a través de una llamada a NdisMIdleNotificationComple.