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 static extern IntPtr CreateFile(string fileName, FILE_ACCESS_RIGHTS access, FileShare share, int securityAttributes, FileMode creation, FILE_FLAGS flags, IntPtr templateFile);
private static extern SafeFileHandle CreateFile( string name, FileAccess access, FileShare share, IntPtr security, FileMode mode, FILE_FLAGS flags, IntPtr templateFile);