Exemplo n.º 1
0
 public void CreateFileDirect()
 {
     using (var cleaner = new TestFileCleaner())
     {
         using (var file = FileMethods.CreateFileDirect(@"\??\" + cleaner.GetTestPath(), CreateDisposition.Create))
         {
             file.IsInvalid.Should().BeFalse();
         }
     }
 }
Exemplo n.º 2
0
 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();
         }
     }
 }
Exemplo n.º 3
0
 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();
         }
     }
 }
Exemplo n.º 4
0
        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);
                }
            }
        }