Compartir a través de


Descripción de cuándo se emiten los IRP de eliminación

En la ilustración siguiente se muestra la secuencia típica de IRP implicadas en la eliminación de los controladores de un dispositivo.

diagrama que ilustra las transiciones típicas de eliminación de irp.

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

  1. Eliminación de consultas

    El administrador de PnP emite un IRP_MN_QUERY_REMOVE_DEVICE para preguntar si se puede quitar un dispositivo sin interrumpir la máquina. También envía este IRP cuando un usuario solicita actualizar controladores para el dispositivo y (en Windows 2000 y versiones posteriores) cuando Administrador de dispositivos deshabilita el dispositivo. (En Windows 98/Me, el administrador de PnP envía irP stop en esta situación; consulte Detener un dispositivo para obtener más información).

    Si todos los controladores de la pila de dispositivos devuelven STATUS_SUCCESS, los controladores han puesto el dispositivo en estado remove-pending. En este estado, los controladores no deben iniciar ninguna operación que impida que se quite el dispositivo.

    En este caso de eliminación "limpia", el administrador de PnP envía un IRP de eliminación de consultas antes de enviar un IRP de eliminación. Consulte el paso 5 para obtener una descripción de la eliminación "sorpresa".

    Aunque no se muestra en el diagrama anterior, un controlador de autobús puede recibir un IRP_MN_QUERY_REMOVE_DEVICE para un dispositivo que no se inicia. Esto puede ocurrir si un usuario solicita quitar dinámicamente un dispositivo que está físicamente presente en la máquina, pero está deshabilitado.

  2. Quitar después de una consulta correcta

    El administrador de PnP emite un IRP_MN_REMOVE_DEVICE para quitar los controladores de un dispositivo.

    Los controladores deben realizar correctamente esta solicitud. Los controladores del dispositivo realizan cualquier limpieza necesaria, desasociar de la pila de dispositivos y eliminar el FDO y cualquier DO de filtro. El controlador de bus primario conserva el PDO hasta que el usuario quita físicamente el dispositivo de la máquina.

    Tenga en cuenta que los controladores pueden recibir un IRP_MN_STOP_DEVICE antes de quitar IRP, pero no es necesario. En Windows 2000 y versiones posteriores, IRP_MN_STOP_DEVICE solo se usa para pausar un dispositivo para el reequilibrio de recursos; no es un paso hacia la eliminación. Si un usuario quita el hardware del dispositivo mientras se detiene el dispositivo, el administrador de PnP envía un IRP de eliminación en algún momento después del irP de detención, pero una detención no es un requisito previo para una eliminación.

  3. Volver a enumerar el dispositivo

    Si el dispositivo se vuelve a enumerar después de que los controladores hayan eliminado sus objetos de dispositivo, el administrador de PnP llama a las rutinas AddDevice de los controladores y emite un IRP_MN_START_DEVICE para restablecer el dispositivo. (Consulte también Los estados del dispositivo de la figura PnP Perspective ).

  4. Cancelación de una eliminación de una consulta

    El administrador de PnP emite un IRP_MN_CANCEL_REMOVE_DEVICE para cancelar una solicitud de eliminación de consultas.

    En respuesta a un IRP_MN_CANCEL_REMOVE_DEVICE, los controladores devuelven el dispositivo a su estado iniciado.

  5. Quitar sorpresa (Windows 2000 y versiones posteriores de Windows)

    En los sistemas Windows 2000 y versiones posteriores, si un usuario desconecta un dispositivo de la máquina sin usar el programa Desconectar o expulsar hardware, el administrador de PnP envía un irP de IRP_MN_SURPRISE_REMOVAL .

    Este caso se denomina eliminación "sorpresa" porque los conductores no reciben ninguna advertencia anticipada.

    En respuesta a un IRP de IRP_MN_SURPRISE_REMOVAL , los controladores del dispositivo producen un error en cualquier E/S pendiente y liberan los recursos de hardware usados por el dispositivo. Los controladores deben asegurarse de que ningún componente intente acceder al dispositivo porque ya no está presente.

    Todos los controladores deben controlar un IRP de IRP_MN_SURPRISE_REMOVAL y deben establecer el estado en STATUS_SUCCESS.

    No se puede cancelar un IRP_MN_SURPRISE_REMOVAL .

  6. Quitar después de la eliminación sorpresa (Windows 2000 y versiones posteriores de Windows)

    Cuando se cierran todos los identificadores abiertos para el dispositivo, el administrador de PnP envía una solicitud de IRP_MN_REMOVE_DEVICE a los controladores del dispositivo. Cada controlador se desasocia de la pila de dispositivos y elimina su objeto de dispositivo.

  7. Quitar sorpresa (Windows 98/Me)

    En Windows 98/Me, un controlador no recibe un IRP_MN_SURPRISE_REMOVAL cuando se quita un dispositivo sin previo aviso. El administrador de PnP envía solo un IRP_MN_REMOVE_DEVICE. Los controladores WDM deben tener código para controlar un IRP_MN_SURPRISE_REMOVAL seguido de un IRP_MN_REMOVE_DEVICE (el comportamiento de Windows 2000 y versiones posteriores para la eliminación sorpresa) y un IRP_MN_REMOVE_DEVICE sin irP de eliminación sorpresa previa (el comportamiento de Windows 98/Me).

  8. Quitar después de un inicio con errores (Windows 2000 y versiones posteriores)

    Si uno de los controladores de un dispositivo produce un error en un IRP_MN_START_DEVICE, el administrador de PnP envía una solicitud de IRP_MN_REMOVE_DEVICE a la pila de dispositivos. Esta eliminación de IRP garantiza que todos los controladores del dispositivo notifiquen que el dispositivo no se ha iniciado correctamente. En respuesta a la IRP_MN_REMOVE_DEVICE IRP, los controladores para el dispositivo deshace sus operaciones de inicio (si han realizado correctamente el IRP de inicio) y deshace sus operaciones AddDevice . El administrador de PnP marca un dispositivo como "error de inicio".

    Este comportamiento solo se aplica a las plataformas windows 2000 y posteriores. En Windows 98/Me, el administrador de PnP envía un IRP_MN_STOP_DEVICE en respuesta a un inicio erróneo.

Un controlador para un dispositivo PnP puede recibir una IRP_MN_SURPRISE_REMOVAL en más situaciones que las que se muestran en la ilustración que ilustran las transiciones típicas de IRP de eliminación. Por ejemplo, un usuario podría insertar una tarjeta PC en la máquina y, a continuación, quitarla antes de iniciar el dispositivo. En ese caso, el administrador de PnP emite un IRP de eliminación sorpresa después de llamar a las rutinas AddDevice de los controladores, pero antes de emitir la solicitud de IRP_MN_START_DEVICE . Un controlador para un dispositivo PnP debe estar preparado para controlar la eliminación de IRP en cualquier momento después de llamar a la rutina AddDevice del controlador.