MiMirrorReduceBlackWrites
VOID __stdcall MiMirrorReduceBlackWrites(_MM_MIRROR_DISPATCH *MirrorDispatch, INT64 a2){
int v2;
_MM_MIRROR_DISPATCH *v3;
INT64 v4;
int v5;
__int64 v6;
int v7;
__int64 v8;
__int64 v9;
__int64 v10;
_MMPFN *v11;
union {unsigned __int64 Long;volatile unsigned __int64 VolatileLong;_MMPTE_HARDWARE Hard;_MMPTE_PROTOTYPE Proto;_MMPTE_SOFTWARE Soft;_MMPTE_TIMESTAMP TimeStamp;_MMPTE_TRANSITION Trans;_MMPTE_SUBSECTION Subsect;_MMPTE_LIST List;} v12;
__int64 v13;
_MMPFN *PfnDb;
INT64 v15;
int v17;
int v18;
__int64 v19;
v2 = *(_DWORD *)(a2 + 8);
v3 = MirrorDispatch;
v4 = *(_QWORD *)a2;
v5 = *(_DWORD *)(a2 + 12);
v15 = v4;
v18 = v5;
if( (v2 & 8) != 0 )
{
v6 = 1i64;
}
else
{
v6 = 2i64;
if( (v2 & 0x400) != 0 )
v6 = 1i64;
}
v7 = 0;
v17 = 0;
v8 = 0i64;
LABEL_6:
v19 = v6;
while( 1 )
{
while( 1 )
{
if( v6 > 1 )
v9 = (__int64)&v3[10 * v7 + 608];
else
v9 = *(_QWORD *)&v3[2 * v6 + 544] + 40 * v8;
v10 = *(_QWORD *)(v9 + 16);
if( v10 != 0xFFFFFFFFFi64 )
{
while( 1 )
{
if( v6 == 2 && MiIsDecayPfn(v10) == 1 )
{
v12.Long = (unsigned __int64)v11[v10].OriginalPte.u;
if( *(&stru_140C4DB30 + 42) && (v12.Long & 0x10) == 0 )
v12.Long &= ~*(&stru_140C4DB30 + 42);
v13 = (v12.Long >> 12) & 0xFFFFFFFFFi64;
if( v13 == v10 )
goto LABEL_22;
PfnDb = MmGetPfnDb();
do
{
MiMirrorOmitPagesFromCopy(v15, v13, 1ui64);
v13 = PfnDb[v13].u1.$976DF529DAC3D73085C9E386D94B91E6::$E228DCF3D8940E384DBC5EFCA756D8B6::_bf_0 & 0xFFFFFFFFFi64;
}
while( v13 != v10 );
v6 = v19;
}
else
{
MiMirrorOmitPagesFromCopy(v15, v10, 1ui64);
}
v11 = MmGetPfnDb();
LABEL_22:
v10 = v11[v10].u1.$976DF529DAC3D73085C9E386D94B91E6::$E228DCF3D8940E384DBC5EFCA756D8B6::_bf_0 & 0xFFFFFFFFFi64;
if( v10 == 0xFFFFFFFFFi64 )
{
v7 = v17;
v3 = MirrorDispatch;
v5 = v18;
break;
}
}
}
if( v6 > 1 )
break;
v8 = (unsigned int)(v8 + 1);
if( (unsigned int)v8 >= *(&stru_140C4DB30 + 67) )
{
v8 = 0i64;
break;
}
}
if( !v6 )
break;
if( v6 == 2 )
{
v17 = ++v7;
if( v7 != v5 )
continue;
}
--v6;
goto LABEL_6;
}
MiMirrorNodeLargePages(v15, v3, 1);
}Referenced by:
MiMirrorBlackPhase