예제 #1
0
 protected override void DisposeCore()
 {
     if (disposeStream)
     {
         simpleStream?.Dispose();
     }
     simpleStream = null;
 }
예제 #2
0
        public override void Read(IntPtr hProcess, HexPosition position, byte[] destination, long destinationIndex, long length)
        {
            if (hProcess == IntPtr.Zero)
            {
                throw new ArgumentException();
            }
            if (position >= HexPosition.MaxEndPosition)
            {
                throw new ArgumentOutOfRangeException(nameof(position));
            }
            if (destination == null)
            {
                throw new ArgumentNullException(nameof(destination));
            }
            if (destinationIndex < 0)
            {
                throw new ArgumentOutOfRangeException(nameof(destinationIndex));
            }
            if (length < 0)
            {
                throw new ArgumentOutOfRangeException(nameof(length));
            }
            if (new HexPosition(destinationIndex) + length > destination.LongLength)
            {
                throw new ArgumentOutOfRangeException(nameof(length));
            }
            HexSimpleBufferStream processStream = null;
            HexBufferStream       cachedStream  = null;

            try {
                processStream = hexBufferStreamFactoryService.CreateSimpleProcessStream(hProcess);
                cachedStream  = hexBufferStreamFactoryService.CreateCached(processStream, disposeStream: false);
                cachedStream.ReadBytes(position, destination, destinationIndex, length);
            }
            finally {
                processStream?.Dispose();
                cachedStream?.Dispose();
            }
        }