MiMirrorRemoveInactivePages
NTSTATUS __stdcall MiMirrorRemoveInactivePages(INT64 a1, INT64 a2, INT64 a3){
int v3;
_MMPFN *PfnDb;
_MMPFN *v6;
NTSTATUS v7;
_MMPFN *v8;
UINT64 v9;
__int64 v10;
UINT8 PteBase;
wchar_t *PteLimit;
__int64 bf_0;
unsigned __int64 v14;
_MMPFN *v15;
__int64 PfnPageSizeIndex;
UINT64 v17;
__int64 v18;
_MMPFN *v19;
unsigned __int64 v20;
int v22;
unsigned __int64 v23;
unsigned __int64 v24;
unsigned __int64 v25;
unsigned __int64 v26;
__int64 v27;
unsigned __int64 v28;
unsigned __int64 v29;
int v30;
v3 = *(_DWORD *)(a1 + 8);
PfnDb = MmGetPfnDb();
v6 = &PfnDb[a2];
v7 = 0;
v8 = &v6[a3];
v9 = 0i64;
v10 = -1i64;
if( v6 >= v8 )
return v7;
PteBase = (unsigned __int8)MmGetPteBase();
PteLimit = (wchar_t *)MmGetPteLimit();
do
{
bf_0 = v6->u4._bf_0;
v14 = 1i64;
if( (bf_0 & 0x1000000000i64) != 0 )
{
v15 = MiGetBaseResidentPageForBugCheck(v6);
v30 = *(_BYTE *)(&v15->u3 + 1) & 7;
PfnPageSizeIndex = (unsigned int)MiGetPfnPageSizeIndex((INT64)v15);
v19 = MmGetPfnDb();
v14 = MiLargePageSizes[PfnPageSizeIndex] + ((v6 - v19) & ~(MiLargePageSizes[PfnPageSizeIndex] - 1)) - (v6 - v19);
if( v14 > v8 - v6 )
v14 = v8 - v6;
if( (v30 & 0xFFFFFFFA) == 0 && v30 != 4 )
goto LABEL_12;
if( v18 == 1 )
goto LABEL_12;
if( (v3 & 0x40) != 0 )
{
if( v17 )
{
LODWORD(v20) = MiGetLeafVa(v17);
if( v20 <= 0xFFFF800000000000ui64 )
goto LABEL_12;
}
}
}
else
{
if( (*(_BYTE *)(&v6->u3 + 1) & 7) != 6 )
goto LABEL_13;
LOBYTE(v22) = MI_PFN_IS_PROTO((_UNICODE_STRING *)v6, (_UNICODE_STRING *)bf_0, PteBase, PteLimit);
if( v22
|| ((v23 >> 60) & 7) == 1
|| (v6->u2._bf_0 & 0x3FFFFFFFFFFFFFFFi64) != 0 && (v23 & 0xFFFFFFFFFi64) == 0xFFFFFFFFDi64 )
{
goto LABEL_12;
}
if( (v3 & 0x40) != 0 )
{
v28 = v27 | v6->PteLong;
if( !v6->PteLong )
v28 = 0i64;
if( v28 >= v24 && v28 <= v25 )
{
v29 = (__int64)((v28 << 25) - (v24 << 25)) >> 16;
if( (v29 < v24 || v29 > v25) && v29 <= v26 )
{
LABEL_12:
PfnDb = MmGetPfnDb();
LABEL_13:
if( !v9 )
v10 = v6 - PfnDb;
v9 += v14;
goto LABEL_16;
}
}
}
}
if( v9 )
{
v7 += v9;
MiMirrorOmitPagesFromCopy(*(_QWORD *)a1, v10, v9);
v9 = 0i64;
}
LABEL_16:
PteBase = (unsigned __int8)MmGetPteBase();
v6 += v14;
PteLimit = (wchar_t *)MmGetPteLimit();
PfnDb = MmGetPfnDb();
}
while( v6 < v8 );
if( v9 )
{
v7 += v9;
MiMirrorOmitPagesFromCopy(*(_QWORD *)a1, v10, v9);
}
return v7;
}Referenced by:
MiMirrorReduceBlackToActiveAndPrivatePages