Exemple #1
0
        public NtfsDiskStream(Stream diskStream, bool ownsStream, List <DataFragment> fragments, uint bytesPrCluster, ushort compressionClusterCount, long length)
        {
            _diskStream              = diskStream;
            _ownsStream              = ownsStream;
            _bytesPrCluster          = bytesPrCluster;
            _compressionClusterCount = compressionClusterCount;

            _fragments = Utility.Util.Sort(fragments, new DataFragmentComparer());

            _length   = length;
            _position = 0;

            if (compressionClusterCount != 0)
            {
                _compressor           = new LZNT1();
                _compressor.BlockSize = (int)_bytesPrCluster;
            }

            long vcn            = 0;
            bool hasCompression = false;

            for (int i = 0; i < _fragments.Count; i++)
            {
                if (_fragments[i].IsCompressed)
                {
                    hasCompression = true;
                }

                // Debug.Assert(_fragments[i].StartingVCN == vcn);
                vcn += _fragments[i].Clusters + _fragments[i].CompressedClusters;
            }

            //if (_compressionClusterCount == 0)
            // Debug.Assert(!hasCompression);
        }
Exemple #2
0
        public NtfsDiskStream(Stream diskStream, bool ownsStream, DataFragment[] fragments, uint bytesPrCluster, ushort compressionClusterCount, long length)
        {
            _diskStream              = diskStream;
            _ownsStream              = ownsStream;
            _bytesPrCluster          = bytesPrCluster;
            _compressionClusterCount = compressionClusterCount;
            _fragments = fragments.OrderBy(s => s.StartingVCN).ToArray();

            _length   = length;
            _position = 0;

            if (compressionClusterCount != 0)
            {
                _compressor           = new LZNT1();
                _compressor.BlockSize = (int)_bytesPrCluster;
            }

            long vcn            = 0;
            bool hasCompression = false;

            for (int i = 0; i < _fragments.Length; i++)
            {
                if (_fragments[i].IsCompressed)
                {
                    hasCompression = true;
                }

                Debug.Assert(_fragments[i].StartingVCN == vcn);
                vcn += _fragments[i].Clusters + _fragments[i].CompressedClusters;
            }

            if (_compressionClusterCount == 0)
            {
                Debug.Assert(!hasCompression);
            }
        }