public static void WriteVolumeGuidPath(this ChangeJournalServiceProtocolWriter writer, VolumeGuidPath volumeGuidPath)
        {
            Contract.Requires(writer != null);
            Contract.Requires(volumeGuidPath.IsValid);

            writer.Write(volumeGuidPath.Path);
        }
        /// <nodoc />
        public void Write(ChangeJournalServiceProtocolWriter writer)
        {
            Contract.Requires(writer != null);

            writer.WriteVolumeGuidPath(VolumeGuidPath);
            writer.Write(JournalId);
            writer.Write(StartUsn.Value);

            writer.Write(EndUsn.HasValue);

            if (EndUsn.HasValue)
            {
                writer.Write(EndUsn.Value.Value);
            }

            writer.Write(ExtraReadCount.HasValue);

            if (ExtraReadCount.HasValue)
            {
                writer.Write(ExtraReadCount.Value);
            }

            writer.Write(TimeLimit.HasValue);

            if (TimeLimit.HasValue)
            {
                writer.Write(TimeLimit.Value.Ticks);
            }
        }
        /// <nodoc />
        public void Write(ChangeJournalServiceProtocolWriter writer)
        {
            Contract.Requires(writer != null);

            Contract.Assert(VolumeGuidPath.IsValid);
            writer.WriteVolumeGuidPath(VolumeGuidPath);
        }
        /// <nodoc />
        public void Write(ChangeJournalServiceProtocolWriter writer)
        {
            Contract.Requires(writer != null);

            writer.WriteUsnJournalReadStatus(Status);
            writer.Write(NextUsn.Value);
            writer.Write(Timeout);
        }
        /// <summary>
        /// Writes the data for a USN journal metadata query (though it may have returned an error)>
        /// </summary>
        public static void WriteQueryUsnJournalResult(this ChangeJournalServiceProtocolWriter writer, QueryUsnJournalResult result)
        {
            Contract.Requires(writer != null);
            Contract.Requires(result != null);

            writer.Write((int)result.Status);
            if (result.Succeeded)
            {
                writer.WriteUsnJournalData(result.Data);
            }
        }
        public static void WriteUsnJournalData(this ChangeJournalServiceProtocolWriter writer, QueryUsnJournalData data)
        {
            Contract.Requires(writer != null);
            Contract.Requires(data != null);

            writer.Write(data.UsnJournalId);
            writer.Write(data.FirstUsn.Value);
            writer.Write(data.NextUsn.Value);
            writer.Write(data.LowestValidUsn.Value);
            writer.Write(data.MaxUsn.Value);
            writer.Write(data.MaximumSize);
            writer.Write(data.AllocationDelta);
        }
        public static void WriteUsnJournalReadStatus(this ChangeJournalServiceProtocolWriter writer, ReadUsnJournalStatus status)
        {
            Contract.Requires(writer != null);

            writer.Write((byte)status);
        }