El objetivo de este TP es desarrollar funciones para leer y analizar diferentes sistemas de archivos (FAT, EXT y NTFS) a partir de una imagen de disco.
El alumno deberá implementar la navegación por directorios, lectura de archivos y levantamiento de datos del superbloque.
Se proporciona una clase base TDriverBase que actúa como driver genérico para cualquier filesystem soportado.
El TP requiere implementar las funciones virtuales puras:
-
LevantarDatosSuperbloque
- Levanta los datos del superbloque y completa la estructura
TDatosFS. - Debe soportar FAT (FAT12, FAT16, FAT32), EXT (EXT2, EXT3, EXT4) y NTFS.
- Levanta los datos del superbloque y completa la estructura
-
ListarDirectorio
- Lista las entradas de un directorio dado un path.
- Devuelve un vector de
TEntradaDirectorio, que incluye:Flags→ atributos (solo lectura, oculto, sistema, directorio, comprimido, encriptado, etc.)Nombre→ nombre de archivo o directorioBytes→ tamaño del archivoFechaCreacion,FechaUltimoAcceso,FechaUltimaModificacionDatosEspecificos→ información particular según el filesystem (FAT, EXT o NTFS)
-
LeerArchivo
- Lee un archivo completo desde la imagen del disco.
- Devuelve un buffer dinámico (
malloc) y su tamaño. - Solo los valores son válidos si el código de retorno es
CODERROR_NINGUNO.
Contiene información general del filesystem:
TipoFilesystem→ FAT, EXT o NTFSBytesPorSector,NumeroDeClusters,BytesPorClusterDatosEspecificos→ subestructuras para FAT (TDatosFSFAT), EXT (TDatosFSEXT) y NTFS (TDatosFSNTFS)
Describe un archivo o subdirectorio:
Flags→ atributos del archivoNombre→ string del nombreBytes→ tamaño en bytesFechaCreacion,FechaUltimoAcceso,FechaUltimaModificacionDatosEspecificos→ cluster inicial (FAT), INode (EXT) o índice MFT (NTFS)
SectoresPorCluster,SectoresReservados,CopiasFAT,EntradasRootDir,SectoresPorFAT,TotalSectores,SectoresOcultos- Datos calculados:
ClustersRootDir,PrimerClusterRootDir
- Implementar correctamente las funciones virtuales puras de
TDriverBase. - Soportar los tres tipos de filesystem indicados (FAT, EXT, NTFS).
- Manejar errores de formato y superbloque inválido.
- Mantener la estructura de directorios y archivos tal como aparece en la imagen.
- Modularizar el código y reutilizar funciones para la navegación por clusters o grupos según el filesystem.
- Respetar los flags de los archivos y directorios para mostrar atributos correctamente.
PunteroASector(__u64 NroSector)permite acceder a un sector físico dentro de la imagen del disco.- Se proporciona código auxiliar para mostrar superbloque, directorio y buffers, pero la implementación de las funciones principales queda a cargo del alumno.
- Todos los cálculos de clusters, offsets y tamaños deben considerar los bytes por sector y sectores por cluster.
- Se provee un zip con imagenes de disco de los distintos filesystems.
- Descompriman la carpeta bins.zip
- Tiene un archivo ejecutable de referencia tpfs_ref. Se corre con ./tpfs_ref
- Su implementacion tiene que devolver lo mismo que el programa de refencia.