示例#1
0
        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);
        }
示例#2
0
        /// <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));
        }
示例#3
0
        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));
        }
示例#4
0
        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));
        }
示例#5
0
        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.");
            }
        }
示例#6
0
        /// <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);
                }
            }
        }
示例#7
0
        /// <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));
                }
            }
        }
示例#8
0
 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)));
        }