[NTOS:MM] Various fixes.

Fix MmFlushImageSection behaviour
Remove an invalid ASSERT
This commit is contained in:
Jérôme Gardou 2020-12-11 18:53:32 +01:00
parent 30f71c7fc0
commit 3141668724

View file

@ -4093,46 +4093,26 @@ CheckSectionPointer:
*/ */
BOOLEAN NTAPI BOOLEAN NTAPI
MmFlushImageSection (IN PSECTION_OBJECT_POINTERS SectionObjectPointer, MmFlushImageSection (IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
IN MMFLUSH_TYPE FlushType) IN MMFLUSH_TYPE FlushType)
{ {
BOOLEAN Result = TRUE;
#ifdef NEWCC
PMM_SECTION_SEGMENT Segment;
#endif
switch(FlushType) switch(FlushType)
{ {
case MmFlushForDelete: case MmFlushForDelete:
if (SectionObjectPointer->ImageSectionObject || case MmFlushForWrite:
SectionObjectPointer->DataSectionObject)
{ {
return FALSE; BOOLEAN Ret = TRUE;
} KIRQL OldIrql = MiAcquirePfnLock();
#ifndef NEWCC
CcRosRemoveIfClosed(SectionObjectPointer);
#endif
return TRUE;
case MmFlushForWrite:
{
DPRINT("MmFlushImageSection(%d)\n", FlushType);
#ifdef NEWCC
Segment = (PMM_SECTION_SEGMENT)SectionObjectPointer->DataSectionObject;
#endif
if (SectionObjectPointer->ImageSectionObject) if (SectionObjectPointer->ImageSectionObject)
{ {
DPRINT1("SectionObject has ImageSection\n"); PMM_IMAGE_SECTION_OBJECT ImageSectionObject = SectionObjectPointer->ImageSectionObject;
return FALSE; if (!(ImageSectionObject->SegFlags & MM_SEGMENT_INDELETE))
} Ret = FALSE;
}
#ifdef NEWCC MiReleasePfnLock(OldIrql);
CcpLock(); return Ret;
Result = !SectionObjectPointer->SharedCacheMap || (Segment->ReferenceCount == CcpCountCacheSections((PNOCC_CACHE_MAP)SectionObjectPointer->SharedCacheMap)); }
CcpUnlock();
DPRINT("Result %d\n", Result);
#endif
return Result;
}
} }
return FALSE; return FALSE;
} }