MiMirrorBlackPhase
NTSTATUS __stdcall MiMirrorBlackPhase(INT64 a1){
INT64 v2;
int v3;
_QWORD *v4;
unsigned __int64 i;
_QWORD **v6;
unsigned __int64 v7;
_QWORD *v8;
_QWORD *j;
_QWORD **v10;
unsigned __int64 v11;
_QWORD *v12;
v2 = *(_QWORD *)a1;
if( *(&stru_140C4DB30 + 530) )
MiRemoveEnclavePagesFromMirror(*(_QWORD *)a1);
v3 = *(_DWORD *)(a1 + 8);
if( (v3 & 0x40D) != 0 )
{
if( (v3 & 0x100) != 0 )
{
MiIterateOverPartitions();
v3 = *(_DWORD *)(a1 + 8);
}
if( (v3 & 0xC0) != 0 )
{
MiMirrorReduceBlackToActiveAndPrivatePages(a1);
}
else if( (v3 & 0x100) != 0 )
{
MiMirrorReduceBlackWrites((_MM_MIRROR_DISPATCH *)&Irp, a1);
}
else
{
MiIterateOverPartitions();
}
v4 = (_QWORD *)*(&stru_140C4DB30 + 241);
i = 0i64;
while( v4 )
{
i = (unsigned __int64)v4;
v4 = (_QWORD *)*v4;
}
while( i )
{
v6 = *(_QWORD ***)(i + 8);
v7 = i;
*(_BYTE *)(i + 70) = 1;
if( v6 )
{
v8 = *v6;
for( i = (unsigned __int64)v6; v8; v8 = (_QWORD *)*v8 )
i = (unsigned __int64)v8;
}
else
{
while( 1 )
{
i = *(_QWORD *)(i + 16) & 0xFFFFFFFFFFFFFFFCui64;
if( !i || *(_QWORD *)i == v7 )
break;
v7 = i;
}
}
}
for( j = (_QWORD *)*(&stru_140C4DB30 + 239); j; j = (_QWORD *)*j )
i = (unsigned __int64)j;
while( i )
{
v10 = *(_QWORD ***)(i + 8);
v11 = i;
*(_BYTE *)(i + 70) = 1;
if( v10 )
{
v12 = *v10;
for( i = (unsigned __int64)v10; v12; v12 = (_QWORD *)*v12 )
i = (unsigned __int64)v12;
}
else
{
while( 1 )
{
i = *(_QWORD *)(i + 16) & 0xFFFFFFFFFFFFFFFCui64;
if( !i || *(_QWORD *)i == v11 )
break;
v11 = i;
}
}
}
}
return MiMirrorPerformBlackWrites(v2);
}Referenced by:
MmDuplicateMemory