Errores en el control de las operaciones de limpieza y cierre
Algunos controladores no distinguen las tareas necesarias en las rutinas DispatchCleanup y DispatchClose . El administrador de E/S llama a la rutina DispatchCleanup de un controlador cuando se cierra el último identificador de un objeto de archivo. Se llama a la rutina DispatchClose cuando se libera la última referencia del objeto de archivo. Un controlador no debe intentar liberar recursos en su rutina DispatchCleanup que están adjuntas a un objeto de archivo o que pueden usar otras rutinas DispatchXxx.
Al llamar a rutinas de distribución, el administrador de E/S contiene una referencia al objeto de archivo para las llamadas de E/S normales. Como resultado, un controlador puede recibir solicitudes de E/S para un objeto de archivo después de llamar a su rutina DispatchCleanup , pero antes de llamar a su rutina DispatchClose . Por ejemplo, un llamador en modo de usuario podría cerrar el identificador de archivo mientras una solicitud del administrador de E/S está en curso desde otro subproceso. Si el controlador ha eliminado o liberado los recursos necesarios antes de que el administrador de E/S llame a su rutina DispatchClose , podrían producirse referencias de puntero no válidas y otros problemas.