[NTOS:MM] Do not chunk-read files marked with FO_RANDOM_ACCESS
authorJérôme Gardou <jerome.gardou@reactos.org>
Tue, 16 Feb 2021 10:27:19 +0000 (11:27 +0100)
committerJérôme Gardou <jerome.gardou@reactos.org>
Fri, 26 Feb 2021 07:46:53 +0000 (08:46 +0100)
ntoskrnl/mm/section.c

index 3f364b4..ea56635 100644 (file)
@@ -1200,9 +1200,19 @@ MmMakeSegmentResident(
     if (!NT_SUCCESS(Status))
         return Status;
 
-    RangeStart = Offset - (Offset % _64K);
-    if (RangeEnd % _64K)
-        RangeEnd += _64K - (RangeEnd % _64K);
+    /* If the file is not random access, read a 64K Chunk. */
+    if (!FlagOn(FileObject->Flags, FO_RANDOM_ACCESS))
+    {
+        RangeStart = Offset - (Offset % _64K);
+        if (RangeEnd % _64K)
+            RangeEnd += _64K - (RangeEnd % _64K);
+    }
+    else
+    {
+        RangeStart = Offset  - (Offset % PAGE_SIZE);
+        if (RangeEnd % PAGE_SIZE)
+            RangeEnd += PAGE_SIZE - (RangeEnd % PAGE_SIZE);
+    }
 
     /* Clamp if needed */
     if (!FlagOn(*Segment->Flags, MM_DATAFILE_SEGMENT))