62 lines
2.4 KiB
C#
62 lines
2.4 KiB
C#
using System.Runtime.InteropServices;
|
|
|
|
namespace BadBuilder.Formatter
|
|
{
|
|
// Reference: https://cscie92.dce.harvard.edu/spring2024/K70F120M/bootSector.h
|
|
|
|
[StructLayout(LayoutKind.Explicit, Pack = 1, Size = 512)]
|
|
internal struct FAT32BootSector
|
|
{
|
|
[FieldOffset(0)]
|
|
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
|
|
internal byte[] JumpCode;
|
|
|
|
[FieldOffset(3)]
|
|
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
|
|
internal char[] OEMName;
|
|
|
|
[FieldOffset(11)] internal ushort BytesPerSector;
|
|
[FieldOffset(13)] internal byte SectorsPerCluster;
|
|
[FieldOffset(14)] internal ushort ReservedSectorCount;
|
|
[FieldOffset(16)] internal byte NumberOfFATs;
|
|
[FieldOffset(17)] internal ushort MaxRootEntries; // Unused in FAT32
|
|
[FieldOffset(19)] internal ushort TotalSectors16; // If 0, use TotalSectors
|
|
[FieldOffset(21)] internal byte MediaDescriptor;
|
|
[FieldOffset(22)] internal ushort SectorsPerFAT16; // Unused in FAT32
|
|
[FieldOffset(24)] internal ushort SectorsPerTrack;
|
|
[FieldOffset(26)] internal ushort NumberOfHeads;
|
|
[FieldOffset(28)] internal uint HiddenSectors;
|
|
[FieldOffset(32)] internal uint TotalSectors; // Total sectors (if TotalSectors16 is 0)
|
|
|
|
// FAT32-specific fields
|
|
[FieldOffset(36)] internal uint SectorsPerFAT;
|
|
[FieldOffset(40)] internal ushort FATFlags;
|
|
[FieldOffset(42)] internal ushort FileSystemVersion;
|
|
[FieldOffset(44)] internal uint RootCluster;
|
|
[FieldOffset(48)] internal ushort FSInfoSector;
|
|
[FieldOffset(50)] internal ushort BackupBootSector;
|
|
|
|
[FieldOffset(52)]
|
|
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)]
|
|
internal byte[] Reserved;
|
|
|
|
[FieldOffset(64)] internal byte DriveNumber;
|
|
[FieldOffset(65)] internal byte Reserved1;
|
|
[FieldOffset(66)] internal byte BootSignature;
|
|
[FieldOffset(67)] internal uint VolumeID;
|
|
|
|
[FieldOffset(71)]
|
|
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 11)]
|
|
internal char[] VolumeLabel;
|
|
|
|
[FieldOffset(82)]
|
|
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
|
|
internal char[] FileSystemType;
|
|
|
|
[FieldOffset(90)]
|
|
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 420)]
|
|
internal byte[] Reserved2;
|
|
|
|
[FieldOffset(510)] internal ushort Signature;
|
|
}
|
|
} |