internal static byte[] GetBytes(string volume, FatVolumeBootRecord vbr) { long DirectoryEntryOffset = vbr.ReservedSectors * vbr.BytesPerSector; //return Helper.readDrive(volume, DirectoryEntryOffset, (vbr.SectorsPerFat * vbr.BytesPerSector)); return(null); }
/// <summary> /// /// </summary> /// <param name="volume"></param> /// <param name="sector"></param> /// <returns></returns> public static FileAllocationTableEntry Get(string volume, int sector) { FatVolumeBootRecord vbr = VolumeBootRecord.Get(volume) as FatVolumeBootRecord; byte[] bytes = FileAllocationTable.GetBytes(volume, vbr); int endSector = 0; switch (vbr.FatType) { case "FAT12": endSector = parseFat12(bytes, sector); break; case "FAT16": endSector = parseFat16(bytes, sector); break; case "FAT32": endSector = parseFat32(bytes, sector); break; } return(new FileAllocationTableEntry(sector, endSector)); }
private static DirectoryEntry[] GetRootDirectory(string volume) { string volLetter = Helper.GetVolumeLetter(volume); FatVolumeBootRecord vbr = VolumeBootRecord.Get(volume) as FatVolumeBootRecord; byte[] bytes = DD.Get(volume, vbr.BytesPerSector * vbr.RootDirectorySector, vbr.BytesPerSector, 2); return(GetInstances(bytes, volume, volLetter)); }
private static DirectoryEntry[] GetRootDirectory(string volume) { string volLetter = Helper.GetVolumeLetter(volume); FatVolumeBootRecord vbr = VolumeBootRecord.Get(volume) as FatVolumeBootRecord; uint FirstRootDirSecNum = vbr.ReservedSectors + (vbr.BPB_NumberOfFATs * vbr.BPB_FatSize32); byte[] bytes = DD.Get(volume, vbr.BytesPerSector * FirstRootDirSecNum, vbr.BytesPerSector, 2); return(GetInstances(bytes, volume, volLetter)); }
internal static int[] GetFatEntry(string volume, int startSector) { FatVolumeBootRecord vbr = VolumeBootRecord.Get(volume) as FatVolumeBootRecord; byte[] fatBytes = GetBytes(volume, vbr); switch (vbr.FatType) { case "FAT12": return(parseFat12(fatBytes, startSector)); case "FAT16": return(parseFat16(fatBytes, startSector)); case "FAT32": return(parseFat32(fatBytes, startSector)); default: throw new Exception("FAT Type could not be determined."); } }
/// <summary> /// /// </summary> /// <returns></returns> public byte[] GetContent() { FatVolumeBootRecord vbr = VolumeBootRecord.Get(this.Volume) as FatVolumeBootRecord; int RootDirSectors = ((vbr.BPB_RootEntryCount * 32) + (vbr.BytesPerSector - 1)) / vbr.BytesPerSector; uint FatSize = 0; if (vbr.BPB_FatSize16 != 0) { FatSize = vbr.BPB_FatSize16; } else { FatSize = vbr.BPB_FatSize32; } uint FirstDataSector = (uint)(vbr.ReservedSectors + (vbr.BPB_NumberOfFATs * FatSize) + RootDirSectors); uint FirstSectorofCluster = ((this.FirstCluster - 2) * vbr.SectorsPerCluster) + FirstDataSector; byte[] bytes = DD.Get(this.Volume, (long)FirstSectorofCluster * (long)vbr.BytesPerSector, vbr.BytesPerSector, 1); if (this.Directory) { return(bytes); } else { if (this.FileSize <= bytes.Length) { return(Helper.GetSubArray(bytes, 0, this.FileSize)); } else { // Need to do more... return(bytes); } } }
/// <summary> /// /// </summary> /// <returns></returns> public byte[] GetContent() { FatVolumeBootRecord vbr = VolumeBootRecord.Get(this.Volume) as FatVolumeBootRecord; int RootDirSectors = ((vbr.BPB_RootEntryCount * 32) + (vbr.BytesPerSector - 1)) / vbr.BytesPerSector; uint FirstDataSector = (uint)(vbr.ReservedSectors + (vbr.BPB_NumberOfFATs * vbr.BPB_FatSize) + RootDirSectors); uint FirstSectorofCluster = ((this.FirstCluster - 2) * vbr.SectorsPerCluster) + FirstDataSector; byte[] bytes = DD.Get(this.Volume, (long)FirstSectorofCluster * (long)vbr.BytesPerSector, vbr.BytesPerSector, 1); if (this.Directory) { return(bytes); } else { if (this.FileSize <= bytes.Length) { return(Helper.GetSubArray(bytes, 0, this.FileSize)); } else { List <byte> byteList = new List <byte>(); int[] clusters = FileAllocationTable.GetFatEntry(this.Volume, (int)this.FirstCluster); foreach (int cluster in clusters) { long targetCluster = ((cluster - 2) * vbr.SectorsPerCluster) + FirstDataSector; byteList.AddRange(DD.Get(this.Volume, targetCluster * vbr.BytesPerSector, vbr.BytesPerSector, 1)); } return(Helper.GetSubArray(byteList.ToArray(), 0, this.FileSize)); } } }
private static byte[] GetBytes(string volume, FatVolumeBootRecord vbr) { return(Helper.readDrive(volume, vbr.ReservedSectors * vbr.BytesPerSector, (vbr.BPB_FatSize * vbr.BytesPerSector))); }
/// <summary> /// /// </summary> /// <param name="volume"></param> /// <returns></returns> public static FileSystemInformation Get(string volume) { FatVolumeBootRecord vbr = VolumeBootRecord.Get(volume) as FatVolumeBootRecord; return(new FileSystemInformation(DD.Get(volume, (vbr.BytesPerSector * vbr.BPB_FileSytemInfo), vbr.BytesPerSector, 1))); }