Detener un dispositivo para reequilibrar recursos

En la ilustración siguiente se muestra la secuencia de IRP implicadas en detener y reiniciar un dispositivo para reequilibrar los recursos.

diagrama que ilustra la detención de un dispositivo para reequilibrar los recursos.

Las notas siguientes corresponden a los números en círculo de la ilustración anterior:

  1. El administrador de PnP emite un IRP_MN_QUERY_STOP_DEVICE para preguntar si los controladores de un dispositivo pueden detener el dispositivo y liberar sus recursos de hardware.

    Si todos los controladores de la pila de dispositivos devuelven STATUS_SUCCESS, los controladores han puesto el dispositivo en un estado (detención pendiente) desde el que el dispositivo se puede detener rápidamente.

    Si una pila de dispositivos devuelve algo distinto de STATUS_SUCCESS, no participará en el proceso de reequilibrio. Dado que el reequilibrio de recursos es una operación de mejor esfuerzo, en este caso el sistema sigue intentando una operación de reequilibrio para satisfacer los requisitos de recursos de los dispositivos del sistema. Sin embargo, si los dispositivos no se detiene la consulta, es posible que no sea posible lograr los resultados deseados (por ejemplo, si se enumera un nuevo dispositivo y se desencadena un reequilibrio, es posible que no reciba sus recursos necesarios, por lo que finalmente no se puede iniciar).

    Un dispositivo que produce un error en una operación de detención de consulta sigue estando en estado operativo, incluso si se produce un error en la detención de la consulta.

    El administrador de PnP consulta tantas pilas de dispositivos como sea necesario para reequilibrar los recursos necesarios.

  2. El administrador de PnP emite un IRP_MN_STOP_DEVICE para detener el dispositivo.

    En Windows 2000 y versiones posteriores de Windows, el administrador de PnP envía una detención de IRP solo si un IRP de detención de consulta anterior para el dispositivo se completó correctamente. En respuesta a una detención de IRP, los controladores liberan los recursos de hardware del dispositivo (por ejemplo, sus puertos de E/S) y mantienen los IRP que requieran acceso al dispositivo.

  3. Después de reequilibrar correctamente los recursos, el administrador de PnP emite IRP_MN_START_DEVICE solicitudes para reiniciar los dispositivos que detuvo durante el reequilibrio.

  4. De lo contrario, el administrador de PnP cancela un IRP de detención de consultas mediante el envío de un IRP_MN_CANCEL_STOP_DEVICE.

    En respuesta a una IRP_MN_CANCEL_STOP_DEVICE, los controladores de un dispositivo devuelven el dispositivo al estado iniciado y reanudan el procesamiento de solicitudes de E/S para el dispositivo.

    El administrador de PnP cancela la detención de consultas de una pila de dispositivos si un controlador de la pila produjo un error en la solicitud o si se produjo un error en la operación de reequilibrio general y está cancelando todas sus solicitudes de detención de consultas. Cuando el administrador de PnP cancela la detención de consultas en una sola pila de dispositivos, envía la solicitud de IRP_MN_CANCEL_STOP_DEVICE porque los controladores adjuntos encima del controlador que produjo un error en la consulta tienen el dispositivo en estado de detención pendiente. Cuando el IRP_MN_CANCEL_STOP_DEVICE se realiza correctamente, los controladores han devuelto el dispositivo al estado iniciado.

  5. Si un controlador no puede reiniciar el dispositivo después de reequilibrar los recursos, el administrador de PnP envía la eliminación de IRP a la pila de dispositivos (en Windows 2000 y versiones posteriores de Windows).

    El administrador de PnP envía primero una solicitud de IRP_MN_SURPRISE_REMOVAL . A continuación, envía una solicitud de IRP_MN_REMOVE_DEVICE , pero solo después de cerrar todos los identificadores abiertos al dispositivo.

El reequilibrio de los recursos de hardware de un dispositivo PnP debe ser transparente para las aplicaciones y los usuarios finales. Es posible que los usuarios experimenten un retraso temporal en la operación, pero los datos no se deben perder. Debe tenerlo en cuenta al controlar IRP de detención.