MiMirrorBlackPhase

INT64 __fastcall MiMirrorBlackPhase(INT64 a1){
  INT64 v2; 
  int v3; 
  RTL_BALANCED_NODE *v4; 
  unsigned __int64 i; 
  _QWORD **v6; 
  unsigned __int64 v7; 
  _QWORD *v8; 
  _QWORD *j; 
  _QWORD **v10; 
  unsigned __int64 v11; 
  _QWORD *v12; 
  v2 = *(_QWORD *)a1;
  if( qword_140C4EBC0 )
    MiRemoveEnclavePagesFromMirror(*(_QWORD *)a1);
  v3 = *(_DWORD *)(a1 + 8);
  if( (v3 & 0x40D) != 0 )
  {
    if( (v3 & 0x100) != 0 )
    {
      MiIterateOverPartitions((void(__fastcall *)(__int64, __int64))MiMirrorRemoveBlackChildPartitionPages, a1);
      v3 = *(_DWORD *)(a1 + 8);
    }
    if( (v3 & 0xC0) != 0 )
    {
      MiMirrorReduceBlackToActiveAndPrivatePages(a1);
    }
    else if( (v3 & 0x100) != 0 )
    {
      MiMirrorReduceBlackWrites((INT64)&MiSystemPartition, a1);
    }
    else
    {
      MiIterateOverPartitions((void(__fastcall *)(__int64, __int64))MiMirrorReduceBlackWrites, a1);
    }
    v4 = RootPointer;
    i = 0i64;
    while( v4 )
    {
      i = (unsigned __int64)v4;
      v4 = v4->Children[0];
    }
    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 *)qword_140C4E2A8; 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