MiMirrorBrownPhase

INT64 __fastcall MiMirrorBrownPhase(INT64 a1){
  int v1; 
  int v3; 
  VOID **i; 
  _MI_PARTITION *v5; 
  int j; 
  int v7; 
  UINT64 v8; 
  int v9; 
  unsigned int v10; 
  VOID **NextPartition; 
  VOID **v12; 
  unsigned __int64 a3; 
  v1 = *(_DWORD *)(a1 + 8);
  if( (v1 & 0xC0) == 0 )
  {
    a3 = 0i64;
    v3 = (v1 & 0xA) == 0;
    for( i = 0i64; ; i = v12 )
    {
      NextPartition = PsGetNextPartition(i);
      v12 = NextPartition;
      if( !NextPartition )
        break;
      v5 = (_MI_PARTITION *)*NextPartition;
      if( (*(_DWORD *)(a1 + 8) & 0x100) == 0 || v5 == (_MI_PARTITION *)&MiSystemPartition )
      {
        for( j = 0; ; ++j )
        {
          MiActOnMirrorBitmap((unsigned __int64 *)qword_140C4E450, 2);
          if( j == v3 && !*(_BYTE *)(a1 + 20) )
          {
            *(_BYTE *)(a1 + 20) = 1;
            _InterlockedIncrement(&dword_140C4EA8C);
          }
          v7 = *(_DWORD *)(a1 + 8);
          if( (v7 & 0x400) != 0 || (v7 & 4) != 0 )
          {
            v8 = *(unsigned int *)(a1 + 12);
          }
          else
          {
            if( (v7 & 0x10) == 0 )
              MiEmptyAllWorkingSets(v5);
            v8 = 0i64;
          }
          MiMirrorGatherBrownPages((INT64 *)a1, v5, *(unsigned int *)(a1 + 16), v8);
          MiMirrorPerformBrownWrites(*(_QWORD *)a1, *(_DWORD *)(a1 + 8), &a3);
          v10 = v9;
          if( v9 < 0 )
          {
            PsQuitNextPartition(v12);
            return v10;
          }
          if( *(_BYTE *)(a1 + 20) == 1 || a3 < 0x400 )
            break;
        }
        if( (*(_DWORD *)(a1 + 8) & 0x100) == 0 )
          continue;
        PsQuitNextPartition(v12);
        return 0i64;
      }
    }
  }
  return 0i64;
}

Referenced by:

MmDuplicateMemory