public MetadataPartition(UdfContext context, LogicalVolumeDescriptor volumeDescriptor, MetadataPartitionMap partitionMap)
            : base(context, volumeDescriptor)
        {
            _partitionMap = partitionMap;

            PhysicalPartition physical = context.PhysicalPartitions[partitionMap.PartitionNumber];
            long fileEntryPos = partitionMap.MetadataFileLocation * (long)volumeDescriptor.LogicalBlockSize;

            byte[] entryData = Utilities.ReadFully(physical.Content, fileEntryPos, _context.PhysicalSectorSize);
            if (!DescriptorTag.IsValid(entryData, 0))
            {
                throw new IOException("Invalid descriptor tag looking for Metadata file entry");
            }

            DescriptorTag dt = Utilities.ToStruct<DescriptorTag>(entryData, 0);
            if (dt.TagIdentifier == TagIdentifier.ExtendedFileEntry)
            {
                ExtendedFileEntry efe = Utilities.ToStruct<ExtendedFileEntry>(entryData, 0);
                _metadataFile = new File(context, physical, efe, _volumeDescriptor.LogicalBlockSize);
            }
            else
            {
                throw new NotImplementedException("Only EFE implemented for Metadata file entry");
            }
        }
 public FileContentBuffer(UdfContext context, Partition partition, FileEntry fileEntry, uint blockSize)
 {
     _context = context;
     _partition = partition;
     _fileEntry = fileEntry;
     _blockSize = blockSize;
     LoadExtents();
 }
        public static LogicalPartition FromDescriptor(UdfContext context, LogicalVolumeDescriptor volumeDescriptor, int index)
        {
            PartitionMap map = volumeDescriptor.PartitionMaps[index];

            Type1PartitionMap asType1 = map as Type1PartitionMap;
            if (asType1 != null)
            {
                return new Type1Partition(context, volumeDescriptor, asType1);
            }

            MetadataPartitionMap asMetadata = map as MetadataPartitionMap;
            if (asMetadata != null)
            {
                return new MetadataPartition(context, volumeDescriptor, asMetadata);
            }

            throw new NotImplementedException("Unrecognized partition map type");
        }
 protected LogicalPartition(UdfContext context, LogicalVolumeDescriptor volumeDescriptor)
 {
     _context = context;
     _volumeDescriptor = volumeDescriptor;
 }
Exemple #5
0
 public static byte[] ReadExtent(UdfContext context, LongAllocationDescriptor extent)
 {
     LogicalPartition partition = context.LogicalPartitions[extent.ExtentLocation.Partition];
     long pos = extent.ExtentLocation.LogicalBlock * partition.LogicalBlockSize;
     return Utilities.ReadFully(partition.Content, pos, (int)extent.ExtentLength);
 }