Exemple #1
0
        private static ushort GetPhysicalOffset(FloppyHeader floppyHeader, ushort sector)
        {
            var rootDirectory = floppyHeader.DirectoryEntries * 32;
            var initialOffset = (ushort)(floppyHeader.BytesPerSector + 2 * floppyHeader.BytesPerSector * floppyHeader.SectorsPerFat) + rootDirectory;

            return((ushort)(initialOffset + (sector - 2) * 512));
        }
Exemple #2
0
        private static void DisplayFloppyHeader(FloppyHeader floppyHeader)
        {
            Console.WriteLine("Boot trap: " + Encoding.ASCII.GetString(floppyHeader.BootTrap));
            Console.WriteLine("OEM: " + Encoding.ASCII.GetString(floppyHeader.Oem));
            Console.WriteLine("Bytes per sector: " + floppyHeader.BytesPerSector);
            Console.WriteLine("Sectors per cluster: " + floppyHeader.SectorsPerCluster);
            Console.WriteLine("Reserved sectors: " + floppyHeader.ReservedSectors);
            Console.WriteLine("FAT count: " + floppyHeader.FatCount);
            Console.WriteLine("Directory entries: " + floppyHeader.DirectoryEntries);
            Console.WriteLine("Total sectors: " + floppyHeader.TotalSectors);
            Console.WriteLine("Media descriptor type: " + floppyHeader.MediaDescriptorType);
            Console.WriteLine("Sectors per FAT: " + floppyHeader.SectorsPerFat);
            Console.WriteLine("Sectors per track: " + floppyHeader.SectorsPerTrack);
            Console.WriteLine("Sides count: " + floppyHeader.SidesCount);
            Console.WriteLine("Hidden sectors: " + floppyHeader.HidddenSectors);
            Console.WriteLine("Large amount: " + floppyHeader.LargeAmount);

            Console.WriteLine();
            Console.WriteLine("Drive number: " + floppyHeader.DriveNumber);
            Console.WriteLine("Flags in Windows NT: " + floppyHeader.FlagsInWindowsNt);
            Console.WriteLine("Signature: " + floppyHeader.Signature);
            Console.WriteLine("Volume ID: " + floppyHeader.VolumeId);
            Console.WriteLine("Volume label: " + Encoding.ASCII.GetString(floppyHeader.VolumeLabel));
            Console.WriteLine("System identifier: " + Encoding.ASCII.GetString(floppyHeader.SystemIdentifier));
            Console.WriteLine("Boot code: " + Encoding.ASCII.GetString(floppyHeader.BootCode));
            Console.WriteLine("Bootloader signature: " + floppyHeader.BootSignature);
        }
Exemple #3
0
        public static List <Directory> Parse(FloppyHeader floppyHeader, byte[] floppyData)
        {
            var directories = new List <Directory>();

            var sectorsToParse = floppyHeader.DirectoryEntries * 32 / floppyHeader.BytesPerSector;
            var initialOffset  = (ushort)(floppyHeader.BytesPerSector + 2 * floppyHeader.BytesPerSector * floppyHeader.SectorsPerFat);
            var offset         = initialOffset;

            for (var sector = 0; sector < sectorsToParse; sector++)
            {
                var data = floppyData.Skip(offset).Take(512).ToArray();

                var fat  = new Fat();
                var size = Marshal.SizeOf(fat);
                var ptr  = Marshal.AllocHGlobal(size);

                Marshal.Copy(data, 0, ptr, size);

                fat = (Fat)Marshal.PtrToStructure(ptr, fat.GetType());
                Marshal.FreeHGlobal(ptr);

                directories.AddRange(fat.Directories);
                offset += floppyHeader.BytesPerSector;
            }

            return(directories);
        }
Exemple #4
0
        public static FloppyHeader Parse(byte[] floppyData)
        {
            var header = new FloppyHeader();

            var size = Marshal.SizeOf(header);
            var ptr  = Marshal.AllocHGlobal(size);

            Marshal.Copy(floppyData, 0, ptr, size);

            header = (FloppyHeader)Marshal.PtrToStructure(ptr, header.GetType());
            Marshal.FreeHGlobal(ptr);

            return(header);
        }
Exemple #5
0
        public static string GetContent(FloppyHeader floppyHeader, byte[] floppyData, List <ushort> chain)
        {
            var content = "";

            foreach (var sector in chain)
            {
                var physicalOffset = GetPhysicalOffset(floppyHeader, sector);
                var data           = floppyData.Skip(physicalOffset).Take(512).ToArray();

                content += Encoding.ASCII.GetString(data);
            }

            return(content);
        }
Exemple #6
0
        public static ushort[] Parse(FloppyHeader floppyHeader, byte[] floppyData, uint index)
        {
            var initialOffset = GetOffsetForFatIndex(floppyHeader, index);
            var fatSize       = GetSizeOfFat(floppyHeader);

            var currentOffset = initialOffset;
            var maxOffset     = currentOffset + fatSize;

            var clusters = new List <ushort>();

            while (currentOffset < maxOffset)
            {
                var firstByte  = floppyData[currentOffset];
                var secondByte = floppyData[currentOffset + 1];
                var thirdByte  = floppyData[currentOffset + 2];

                clusters.Add(GetClusterValueWithFullLeft(firstByte, secondByte));
                clusters.Add(GetClusterValueWithFullRight(secondByte, thirdByte));

                currentOffset += 3;
            }

            return(clusters.ToArray());
        }
Exemple #7
0
 private static ushort GetSizeOfFat(FloppyHeader floppyHeader)
 {
     return((ushort)(floppyHeader.BytesPerSector * floppyHeader.SectorsPerFat));
 }
Exemple #8
0
 private static ushort GetOffsetForFatIndex(FloppyHeader floppyHeader, uint index)
 {
     return((ushort)(floppyHeader.BytesPerSector + index * floppyHeader.BytesPerSector * floppyHeader.SectorsPerFat));
 }