MiRemoveUnusedSubsection
VOID __stdcall MiRemoveUnusedSubsection(_MSUBSECTION *MappedSubsection){
__int64 v2;
_LIST_ENTRY *p_DereferenceList;
_LIST_ENTRY *Flink;
_LIST_ENTRY *Blink;
v2 = *(_QWORD *)(*(&stru_140C4DB30 + 267) + 8i64 * (MappedSubsection->Core.ControlArea->u1.Flags._bf_0 & 0x3FF));
ExAcquireSpinLockExclusiveAtDpcLevel((INT64 *)(v2 + 1344));
p_DereferenceList = &MappedSubsection->DereferenceList;
Flink = MappedSubsection->DereferenceList.Flink;
if( Flink->Blink != &MappedSubsection->DereferenceList
|| (Blink = MappedSubsection->DereferenceList.Blink, Blink->Flink != p_DereferenceList) )
{
__fastfail(3u);
}
Blink->Flink = Flink;
Flink->Blink = Blink;
MappedSubsection->Core.u.SubsectionFlags._bf_2 &= ~8u;
MappedSubsection->DereferenceList.Blink = &MappedSubsection->DereferenceList;
p_DereferenceList->Flink = p_DereferenceList;
MiReduceUnusedSubsectionCount(MappedSubsection);
ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)(v2 + 1344));
}Referenced by:
MiDereferenceControlAreaPfnList
MiFlushSectionInternal
MiPrepareSegmentForDeletion
MiReferenceActiveSubsection
MiReferenceSubsection
MmPurgeSection