private CatalogFileRecord(byte[] bytes, int offset, string volumeName, string fileName) { VolumeName = volumeName; FileName = fileName; KeyLength = Helper.SwapEndianness(BitConverter.ToUInt16(bytes, offset)); ParentCatalogNodeId = Helper.SwapEndianness(BitConverter.ToUInt32(bytes, offset + 0x02)); Name = GetHfsString(bytes, offset + 0x06); int dataOffset = offset + KeyLength + 0x02; RecordType = (RECORD_TYPE)Helper.SwapEndianness(BitConverter.ToUInt16(bytes, dataOffset)); Flags = (FILE_FLAGS)Helper.SwapEndianness(BitConverter.ToUInt16(bytes, dataOffset + 0x02)); CatalogNodeId = Helper.SwapEndianness(BitConverter.ToUInt32(bytes, dataOffset + 0x08)); CreateDate = Helper.FromOSXTime(Helper.SwapEndianness(BitConverter.ToUInt32(bytes, dataOffset + 0x0C))); ContentModDate = Helper.FromOSXTime(Helper.SwapEndianness(BitConverter.ToUInt32(bytes, dataOffset + 0x10))); AttributeModDate = Helper.FromOSXTime(Helper.SwapEndianness(BitConverter.ToUInt32(bytes, dataOffset + 0x14))); AccessDate = Helper.FromOSXTime(Helper.SwapEndianness(BitConverter.ToUInt32(bytes, dataOffset + 0x18))); BackupDate = Helper.FromOSXTime(Helper.SwapEndianness(BitConverter.ToUInt32(bytes, dataOffset + 0x1C))); Permissions = BSDInfo.Get(bytes, dataOffset + 0x20); UserInfo = FileInfo.Get(bytes, dataOffset + 0x30); FinderInfo = ExtendedFileInfo.Get(bytes, dataOffset + 0x40); TextEncoding = (CatalogFile.TEXT_ENCODING)Helper.SwapEndianness(BitConverter.ToUInt32(bytes, dataOffset + 0x50)); VolumeHeader volHeader = VolumeHeader.Get(volumeName); DataFork = ForkData.Get(bytes, dataOffset + 0x58, volumeName, volHeader.BlockSize); ResourceFork = ForkData.Get(bytes, dataOffset + 0xA8, volumeName, volHeader.BlockSize); }
private VolumeHeader(byte[] bytes, string volumeName) { Signature = Encoding.ASCII.GetString(bytes, 0x00, 0x02); Version = (HFS_VERSION)Helper.SwapEndianness(BitConverter.ToUInt16(bytes, 0x02)); Attributes = Helper.SwapEndianness(BitConverter.ToUInt32(bytes, 0x04)); LastMountedVersion = Encoding.ASCII.GetString(bytes, 0x08, 0x04); JournalInfoBlock = Helper.SwapEndianness(BitConverter.ToUInt32(bytes, 0x0C)); CreateData = Helper.FromOSXTime(Helper.SwapEndianness(BitConverter.ToUInt32(bytes, 0x10))); ModifyDate = Helper.FromOSXTime(Helper.SwapEndianness(BitConverter.ToUInt32(bytes, 0x14))); BackupDate = Helper.FromOSXTime(Helper.SwapEndianness(BitConverter.ToUInt32(bytes, 0x18))); CheckedDate = Helper.FromOSXTime(Helper.SwapEndianness(BitConverter.ToUInt32(bytes, 0x1C))); FileCount = Helper.SwapEndianness(BitConverter.ToUInt32(bytes, 0x20)); FolderCount = Helper.SwapEndianness(BitConverter.ToUInt32(bytes, 0x24)); BlockSize = Helper.SwapEndianness(BitConverter.ToUInt32(bytes, 0x28)); TotalBlocks = Helper.SwapEndianness(BitConverter.ToUInt32(bytes, 0x2C)); FreeBlocks = Helper.SwapEndianness(BitConverter.ToUInt32(bytes, 0x30)); NextAllocation = Helper.SwapEndianness(BitConverter.ToUInt32(bytes, 0x34)); RsrcClumpSize = Helper.SwapEndianness(BitConverter.ToUInt32(bytes, 0x38)); DataClumpSize = Helper.SwapEndianness(BitConverter.ToUInt32(bytes, 0x3C)); NextCatalogId = Helper.GetSubArray(bytes, 0x40, 0x04); WriteCount = Helper.SwapEndianness(BitConverter.ToUInt32(bytes, 0x44)); EncodingBitmap = Helper.SwapEndianness(BitConverter.ToUInt64(bytes, 0x48)); FinderInfoArray0 = Helper.GetSubArray(bytes, 0x50, 0x04); FinderInfoArray1 = Helper.GetSubArray(bytes, 0x54, 0x04); FinderInfoArray2 = Helper.GetSubArray(bytes, 0x58, 0x04); FinderInfoArray3 = Helper.GetSubArray(bytes, 0x5C, 0x04); FinderInfoArray4 = Helper.GetSubArray(bytes, 0x60, 0x04); FinderInfoArray5 = Helper.GetSubArray(bytes, 0x64, 0x04); FinderInfoArray6 = Helper.GetSubArray(bytes, 0x68, 0x04); FinderInfoArray7 = Helper.GetSubArray(bytes, 0x6C, 0x04); AllocationFile = ForkData.Get(bytes, 0x70, volumeName, BlockSize); ExtentsOverflowFile = ForkData.Get(bytes, 0xC0, volumeName, BlockSize); CatalogFile = ForkData.Get(bytes, 0x110, volumeName, BlockSize); AttributesFile = ForkData.Get(bytes, 0x160, volumeName, BlockSize); StartupFile = ForkData.Get(bytes, 0x1B0, volumeName, BlockSize); }