public void CreateFileDirect() { using (var cleaner = new TestFileCleaner()) { using (var file = FileMethods.CreateFileDirect(@"\??\" + cleaner.GetTestPath(), CreateDisposition.Create)) { file.IsInvalid.Should().BeFalse(); } } }
public void OpenFileDirect() { using (var cleaner = new TestFileCleaner()) { string path = cleaner.CreateTestFile(nameof(OpenFileDirect)); using (var file = FileMethods.CreateFileDirect(@"\??\" + path, CreateDisposition.Open)) { file.IsInvalid.Should().BeFalse(); } } }
public void OpenFileDirect_WithSpan() { using (var cleaner = new TestFileCleaner()) { string path = @"\??\" + cleaner.CreateTestFile(nameof(OpenFileDirect_WithSpan)); string wrongPath = path + "foo"; using (var file = FileMethods.CreateFileDirect(wrongPath.AsSpan().Slice(0, path.Length), CreateDisposition.Open)) { file.IsInvalid.Should().BeFalse(); } } }
public void TestFileRights() { using (var cleaner = new TestFileCleaner()) { string testFile = cleaner.CreateTestFile(nameof(TestFileRights)); // CreateFile ALWAYS adds SYNCHRONIZE & FILE_READ_ATTRIBUTES. using (var handle = FileMethods.CreateFile(testFile, CreationDisposition.OpenExisting, DesiredAccess.ReadControl)) { FileMethods.GetRights(handle).Should().Be(FileAccessRights.ReadAttributes | FileAccessRights.ReadControl | FileAccessRights.Synchronize); } using (var handle = FileMethods.CreateFile(testFile, CreationDisposition.OpenExisting, DesiredAccess.ReadAttributes)) { FileMethods.GetRights(handle).Should().Be(FileAccessRights.ReadAttributes | FileAccessRights.Synchronize); } using (var handle = FileMethods.CreateFile(testFile, CreationDisposition.OpenExisting, DesiredAccess.Synchronize)) { FileMethods.GetRights(handle).Should().Be(FileAccessRights.ReadAttributes | FileAccessRights.Synchronize); } using (var handle = FileMethods.CreateFile(testFile, CreationDisposition.OpenExisting, DesiredAccess.GenericRead)) { FileMethods.GetRights(handle).Should().Be(FileAccessRights.ReadAttributes | FileAccessRights.ReadControl | FileAccessRights.Synchronize | FileAccessRights.ReadData | FileAccessRights.ReadExtendedAttributes); } // DesiredAccess.Synchronize is required for synchronous access. string directTestFile = @"\??\" + testFile; using (var handle = FileMethods.CreateFileDirect(directTestFile, CreateDisposition.Open, DesiredAccess.Synchronize)) { FileMethods.GetRights(handle).Should().Be(FileAccessRights.Synchronize); } // Open async using (var handle = FileMethods.CreateFileDirect(directTestFile, CreateDisposition.Open, DesiredAccess.ReadAttributes, ShareModes.ReadWrite, 0, 0)) { FileMethods.GetRights(handle).Should().Be(FileAccessRights.ReadAttributes); } using (var handle = FileMethods.CreateFileDirect(directTestFile, CreateDisposition.Open, DesiredAccess.ReadAttributes | DesiredAccess.Synchronize, ShareModes.ReadWrite, 0, 0)) { FileMethods.GetRights(handle).Should().Be(FileAccessRights.ReadAttributes | FileAccessRights.Synchronize); } } }