MiMirrorReduceBlackWrites
UINT64 __fastcall MiMirrorReduceBlackWrites(INT64 a1, INT64 a2){
int v2;
INT64 v3;
INT64 v4;
int v5;
__int64 v6;
unsigned int v7;
__int64 v8;
__int64 v9;
__int64 v10;
_MMPFN *v11;
unsigned __int64 v12;
__int64 v13;
_MMPFN *PfnDb;
INT64 v16;
int v18;
int v19;
__int64 v20;
v2 = *(_DWORD *)(a2 + 8);
v3 = a1;
v4 = *(_QWORD *)a2;
v5 = *(_DWORD *)(a2 + 12);
v16 = v4;
v19 = v5;
if( (v2 & 8) != 0 )
{
v6 = 1i64;
}
else
{
v6 = 2i64;
if( (v2 & 0x400) != 0 )
v6 = 1i64;
}
v7 = 0;
v18 = 0;
v8 = 0i64;
LABEL_6:
v20 = v6;
while( 1 )
{
while( 1 )
{
if( v6 > 1 )
v9 = v3 + 40i64 * v7 + 2432;
else
v9 = *(_QWORD *)(v3 + 8 * v6 + 2176) + 40 * v8;
v10 = *(_QWORD *)(v9 + 16);
if( v10 != 0xFFFFFFFFFi64 )
{
while( 1 )
{
if( v6 == 2 && (unsigned int)MiIsDecayPfn(v10) == 1 )
{
v12 = *((_QWORD *)v11 + 6 * v10 + 2);
if( qword_140C4DC80 && (v12 & 0x10) == 0 )
v12 &= ~qword_140C4DC80;
v13 = (v12 >> 12) & 0xFFFFFFFFFi64;
if( v13 == v10 )
goto LABEL_22;
PfnDb = MmGetPfnDb();
do
{
MiMirrorOmitPagesFromCopy(v16, v13, 1ui64);
v13 = *((_QWORD *)PfnDb + 6 * v13) & 0xFFFFFFFFFi64;
}
while( v13 != v10 );
v6 = v20;
}
else
{
MiMirrorOmitPagesFromCopy(v16, v10, 1ui64);
}
v11 = MmGetPfnDb();
LABEL_22:
v10 = *((_QWORD *)v11 + 6 * v10) & 0xFFFFFFFFFi64;
if( v10 == 0xFFFFFFFFFi64 )
{
v7 = v18;
v3 = a1;
v5 = v19;
break;
}
}
}
if( v6 > 1 )
break;
v8 = (unsigned int)(v8 + 1);
if( (unsigned int)v8 >= dword_140C4DC3C )
{
v8 = 0i64;
break;
}
}
if( !v6 )
return MiMirrorNodeLargePages(v16, v3, (UINT8 *)1);
if( v6 == 2 )
{
v18 = ++v7;
if( v7 != v5 )
continue;
}
--v6;
goto LABEL_6;
}
}Referenced by:
MiMirrorBlackPhase