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