MiCombiningInProgress
VOID __stdcall MiCombiningInProgress(_MI_PAGE_COMBINING_SUPPORT *Pcs, _MI_ARBITRARY_PAGE_MAP *PageMap, UINT64 Starting){
_MI_PARTITION *Partition;
int v5;
unsigned __int64 v7;
_ETHREAD *CurrentThread;
_QWORD *p_Flink;
_LIST_ENTRY *Flink;
BOOL v11;
_QWORD *v12;
_QWORD *v13;
__int64 v14;
_MI_ARBITRARY_PAGE_MAP **v15;
Partition = Pcs->Partition;
v5 = Starting;
v7 = (unsigned __int8)ExAcquireSpinLockExclusive((INT64 *)&stru_140C4DB30 + 234);
if( v5 != 1 )
{
v14 = *(_QWORD *)PageMap;
v15 = (_MI_ARBITRARY_PAGE_MAP **)*((_QWORD *)PageMap + 1);
if( *(_MI_ARBITRARY_PAGE_MAP **)(*(_QWORD *)PageMap + 8i64) == PageMap && *v15 == PageMap )
{
*v15 = (_MI_ARBITRARY_PAGE_MAP *)v14;
*(_QWORD *)(v14 + 8) = v15;
RtlAvlRemoveNode((UINT64 *)&stru_140C4DB30 + 235, (INT64 *)PageMap + 2);
--Pcs->CombiningThreadCount;
if( *(&stru_140C4DB30 + 469) == 1 )
MiFlushEntireTbDueToAttributeChange();
--*(&stru_140C4DB30 + 469);
goto LABEL_16;
}
LABEL_19:
__fastfail(3u);
}
++Pcs->CombiningThreadCount;
++*(&stru_140C4DB30 + 469);
if( !*(&stru_140C4DB30 + 474) )
{
*(&stru_140C4DB30 + 474) = 1;
*(&stru_140C4DB30 + 236) = _InterlockedIncrement64(&PsNextSecurityDomain);
}
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
memset(PageMap, 0i64, 0x50u);
p_Flink = &Partition->PageCombine.ArbitraryPfnMapList.Flink;
*((_QWORD *)PageMap + 5) = CurrentThread;
Flink = Partition->PageCombine.ArbitraryPfnMapList.Flink;
if( Flink->Blink != &Partition->PageCombine.ArbitraryPfnMapList )
goto LABEL_19;
*(_QWORD *)PageMap = Flink;
v11 = 0;
*((_QWORD *)PageMap + 1) = p_Flink;
Flink->Blink = (_LIST_ENTRY *)PageMap;
*p_Flink = PageMap;
v12 = (_QWORD *)*(&stru_140C4DB30 + 235);
if( !*(&stru_140C4DB30 + 235) )
goto LABEL_18;
while( (unsigned __int64)CurrentThread < v12[3] )
{
v13 = (_QWORD *)*v12;
if( !*v12 )
goto LABEL_18;
LABEL_8:
v12 = v13;
}
v13 = (_QWORD *)v12[1];
if( v13 )
goto LABEL_8;
v11 = 1;
LABEL_18:
RtlAvlInsertNodeEx(
(_RTL_BALANCED_NODE **)&stru_140C4DB30 + 235,
(UINT64)v12,
v11,
(_RTL_BALANCED_NODE *)(PageMap + 4));
LABEL_16:
ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)&stru_140C4DB30 + 234);
__writecr8(v7);
}Referenced by:
MiCombineIdenticalPages