https://git.reactos.org/?p=reactos.git;a=commitdiff;h=e46f1a9af37ffd0fd9a992...
commit e46f1a9af37ffd0fd9a99293c66f23acb0990856 Author: Jérôme Gardou jerome.gardou@reactos.org AuthorDate: Mon Jan 4 18:26:18 2021 +0100 Commit: Jérôme Gardou jerome.gardou@reactos.org CommitDate: Wed Feb 3 09:41:23 2021 +0100
[NTOS:MM] Disable APC while performing Paged Read --- ntoskrnl/mm/section.c | 6 ++++++ 1 file changed, 6 insertions(+)
diff --git a/ntoskrnl/mm/section.c b/ntoskrnl/mm/section.c index 1c7fbdbefc6..b30462094c7 100644 --- a/ntoskrnl/mm/section.c +++ b/ntoskrnl/mm/section.c @@ -1187,6 +1187,7 @@ MiReadPage(PMEMORY_AREA MemoryArea, PMDL Mdl = (PMDL)MdlBase; PFILE_OBJECT FileObject = MemoryArea->SectionData.Segment->FileObject; LARGE_INTEGER FileOffset; + KIRQL OldIrql;
FileOffset.QuadPart = MemoryArea->SectionData.Segment->Image.FileOffset + SegOffset;
@@ -1203,6 +1204,9 @@ MiReadPage(PMEMORY_AREA MemoryArea,
KeInitializeEvent(&Event, NotificationEvent, FALSE);
+ /* Disable APCs */ + KeRaiseIrql(APC_LEVEL, &OldIrql); + Status = IoPageRead(FileObject, Mdl, &FileOffset, &Event, &IoStatus); if (Status == STATUS_PENDING) { @@ -1215,6 +1219,8 @@ MiReadPage(PMEMORY_AREA MemoryArea, MmUnmapLockedPages (Mdl->MappedSystemVa, Mdl); }
+ KeLowerIrql(OldIrql); + if (Status == STATUS_END_OF_FILE) { DPRINT1("Got STATUS_END_OF_FILE at offset %I64d for file %wZ.\n", SegOffset, &FileObject->FileName);