public override int Read(byte[] buffer, int offset, int count) { var pinnedBuffer = GCHandle.Alloc(buffer, GCHandleType.Pinned); var bufferPtr = pinnedBuffer.AddrOfPinnedObject(); var readPtr = Marshal.AllocHGlobal(8); _stream.Read(bufferPtr + offset, count, readPtr); var read = Marshal.ReadInt64(readPtr); pinnedBuffer.Free(); Marshal.FreeHGlobal(readPtr); return((int)read); }