Rutina RemoveDevice del controlador de clase storage
Cuando se va a quitar un dispositivo, el administrador de PnP llama primero a la rutina DispatchPnP del controlador de clase con una solicitud de eliminación de consultas PnP (IRP_MJ_PNP con IRP_MN_QUERY_REMOVE_DEVICE. El controlador de clase de almacenamiento debe producir un error en la solicitud query-remove en cualquiera de los casos siguientes:
El dispositivo contiene el archivo de paginación del sistema o el archivo de hibernación.
El controlador ejecuta una operación larga que no debe cancelarse (por ejemplo, rebobinar o dar formato a una cinta).
Hay identificadores pendientes para el dispositivo (CREATEs).
Es posible que el controlador de clase de almacenamiento también produzca un error en una solicitud de eliminación de consultas si el dispositivo se reclama para el volcado de memoria, ya que al quitar este tipo de dispositivo se deshabilita el volcado de memoria.
Si el controlador de clase de almacenamiento devuelve STATUS_SUCCESS en respuesta a una solicitud de eliminación de consultas, el administrador de PnP llama a la rutina DispatchPnP del controlador de clase con una solicitud de eliminación de PnP (IRP_MJ_PNP con IRP_MN_REMOVE_DEVICE). La rutina DispatchPnP del controlador de clase de almacenamiento llama a una rutina RemoveDevice interna o implementa la misma funcionalidad insertada.
Una rutina RemoveDevice del controlador de clase de almacenamiento debe hacer lo siguiente:
Libere los recursos pendientes, como la memoria o los eventos, asignados por el controlador.
Elimine los vínculos simbólicos, si los hay, creados por el controlador.
Elimine el objeto de dispositivo (FDO).
Reenvíe la solicitud al controlador inferior siguiente.
Si el controlador de clase de almacenamiento creó archivos PPO al inicio (por ejemplo, para representar particiones en un dispositivo multimedia con particiones), estos PPO ya se han quitado cuando el administrador de PnP envía la solicitud de eliminación al controlador de clase de almacenamiento.
Incluso después de eliminar un objeto de dispositivo, si tiene un recuento de referencias distinto de cero, el objeto de dispositivo persiste en el sistema hasta que su recuento de referencias alcanza cero, desaparece silenciosamente. Un controlador de clase de almacenamiento no debe intentar usar el puntero de objeto de dispositivo una vez eliminado el objeto de dispositivo.
Para obtener más información sobre cómo controlar una solicitud de eliminación, consulte Eliminación de un dispositivo.