Пример #1
0
        private static QueryUsnJournalData QueryJournal(SafeFileHandle volumeHandle)
        {
            QueryUsnJournalResult queryResult = FileUtilities.TryQueryUsnJournal(volumeHandle);

            XAssert.AreEqual(
                QueryUsnJournalStatus.Success,
                queryResult.Status,
                "Failed to query the volume's change journal. Is it enabled on the test output directory's volume?");
            XAssert.IsTrue(queryResult.Succeeded);

            return(queryResult.Data);
        }
Пример #2
0
        private QueryUsnJournalData QueryJournal(SafeFileHandle volumeHandle)
        {
            QueryUsnJournalResult queryResult = FileUtilities.TryQueryUsnJournal(volumeHandle);

            XAssert.AreEqual(
                QueryUsnJournalStatus.Success,
                queryResult.Status,
                "Failed to query the volume's change journal. Is it enabled on volume of the test temporary directory '" + TemporaryDirectory + "'?");
            XAssert.IsTrue(queryResult.Succeeded);

            return(queryResult.Data);
        }
Пример #3
0
        /// <inheritdoc />
        public MaybeResponse <QueryUsnJournalResult> QueryJournal(QueryJournalRequest request)
        {
            Contract.Assert(request.VolumeGuidPath.IsValid);

            SafeFileHandle volumeHandle;
            OpenFileResult volumeOpenResult = OpenVolumeHandle(request.VolumeGuidPath, out volumeHandle);

            using (volumeHandle)
            {
                if (!volumeOpenResult.Succeeded)
                {
                    string message = I($"Failed to open a volume handle for the volume '{request.VolumeGuidPath.Path}': Status: {volumeOpenResult.Status.ToString()} | Error code: {volumeOpenResult.NativeErrorCode}");
                    return(new MaybeResponse <QueryUsnJournalResult>(
                               new ErrorResponse(ErrorStatus.FailedToOpenVolumeHandle, message)));
                }

                QueryUsnJournalResult result = FileUtilities.TryQueryUsnJournal(volumeHandle);
                return(new MaybeResponse <QueryUsnJournalResult>(result));
            }
        }
Пример #4
0
        public void QueryJournal()
        {
            WithVolumeHandle(
                volumeHandle =>
            {
                using (FileStream file = File.Create(GetFullPath("File")))
                {
                    QueryUsnJournalResult queryResult = FileUtilities.TryQueryUsnJournal(volumeHandle);
                    XAssert.AreEqual(
                        QueryUsnJournalStatus.Success,
                        queryResult.Status,
                        "Failed to query the volume's change journal. Is it enabled on the test output directory's volume?");
                    XAssert.IsTrue(queryResult.Succeeded);

                    Usn usn = FileUtilities.ReadFileUsnByHandle(file.SafeFileHandle).Value.Usn;
                    XAssert.IsTrue(queryResult.Data.LowestValidUsn <= usn);
                    XAssert.IsTrue(queryResult.Data.NextUsn > usn);
                }
            });
        }
        /// <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);
            }
        }