MiMirrorPerformBrownWrites

__int64 __fastcall MiMirrorPerformBrownWrites(__int64 a1, char a2, _QWORD *a3){
  unsigned int v3; 
  UINT64 v4; 
  int v5; 
  __int64 v6; 
  char v7; 
  unsigned __int64 v8; 
  unsigned __int64 i; 
  _QWORD *v10; 
  __int64 j; 
  unsigned __int64 v12; 
  unsigned __int64 v13; 
  unsigned __int64 v14; 
  _DWORD *v15; 
  __int64 v16; 
  unsigned __int64 v17; 
  unsigned __int64 v18; 
  _DWORD *v20; 
  UINT64 v21; 
  unsigned __int64 v22; 
  unsigned __int64 v23; 
  volatile signed __int32 *v24; 
  unsigned int v25; 
  unsigned __int64 v26; 
  unsigned __int64 v27; 
  __int64 v28; 
  _MMPFN *v29; 
  _MMPFN *v30; 
  _MIPFNBLINK *p_u2; 
  __int64 v32; 
  unsigned __int64 v33; 
  int v34; 
  UINT8 v35; 
  UINT64 v36; 
  unsigned __int64 v37; 
  volatile signed __int32 *v38; 
  unsigned __int64 v39; 
  _MMPFN *v40; 
  _MMPFN *v41; 
  unsigned __int64 v42; 
  int v43; 
  int v44; 
  __int64 v45; 
  int v49; 

  v3 = 0;
  v43 = 0;
  v4 = 0i64;
  v49 = 0;
  v5 = 0;
  v45 = 0i64;
  v6 = 0i64;
  v7 = a2;
  while( 1 )
  {
    v8 = v4 & -(__int64)(v4 < *(&stru_140C4DB30 + 292));
    for( i = *(&stru_140C4DB30 + 292) - 1i64; i - v8 == -1i64; i = v21 - 1 )
    {
      v12 = -1i64;
LABEL_46:
      if( !v8 )
        goto LABEL_10;
      v21 = v4 + 1;
      v8 = 0i64;
      if( v4 + 1 > *(&stru_140C4DB30 + 292) )
        v21 = *(&stru_140C4DB30 + 292);
    }
    v10 = (_QWORD *)(*(&stru_140C4DB30 + 293) + 8 * (v8 >> 6));
    for( j = ((1i64 << (v8 & 0x3F)) - 1) | ~*v10; j == -1; j = ~*v10 )
    {
      if( (unsigned __int64)++v10 > *(&stru_140C4DB30 + 293) + 8 * (i >> 6) )
        goto LABEL_43;
    }
    _BitScanForward64((unsigned __int64 *)&j, ~j);
    v12 = j + (((__int64)v10 - *(&stru_140C4DB30 + 293)) >> 3 << 6);
    if( v12 > i )
    {
LABEL_43:
      v12 = -1i64;
      goto LABEL_46;
    }
    if( v12 == -1i64 )
      goto LABEL_46;
LABEL_10:
    if( v12 < v4 || v12 == -1i64 )
      goto LABEL_32;
    if( *(&stru_140C4DB30 + 292) > v12 )
    {
      v13 = v12;
      v14 = *(&stru_140C4DB30 + 293) + 4 * ((unsigned __int64)(*(&stru_140C4DB30 + 292) - 1i64) >> 5);
      v15 = (_DWORD *)(*(&stru_140C4DB30 + 293) + 4 * (v12 >> 5));
      if( v15 != (_DWORD *)v14 && (*v15 | *((_DWORD *)qword_140011CE0 + (v12 & 0x1F))) == -1 )
      {
        v13 = (v12 & 0xFFFFFFFFFFFFFFE0ui64) + 32;
        for( ++v15; (unsigned __int64)v15 < v14 && *v15 == -1; ++v15 )
          v13 += 32i64;
      }
      while( v13 < *(&stru_140C4DB30 + 292) && _bittest64(*(&stru_140C4DB30 + 293), v13) )
        ++v13;
      v16 = 0i64;
      if( v15 != (_DWORD *)v14 && (*v15 & ~*((_DWORD *)qword_140011CE0 + (v13 & 0x1F))) == 0 )
      {
        v16 = 32 - (v13 & 0x1F);
        if( v16 == -1 )
          goto LABEL_26;
        v20 = v15 + 1;
        while( (unsigned __int64)v20 < v14 && !*v20 )
        {
          ++v20;
          v16 += 32i64;
          if( v16 == -1 )
            goto LABEL_26;
        }
      }
      v17 = v16 + v13;
      if( v16 + v13 < *(&stru_140C4DB30 + 292) )
      {
        do
        {
          if( _bittest64(*(&stru_140C4DB30 + 293), v17) )
            break;
          if( v16 == -1 )
            break;
          ++v17;
          ++v16;
        }
        while( v17 < *(&stru_140C4DB30 + 292) );
        v3 = v43;
      }
LABEL_26:
      if( v16 )
        goto LABEL_27;
      goto LABEL_51;
    }
    v16 = 0i64;
LABEL_51:
    v13 = *(&stru_140C4DB30 + 292);
LABEL_27:
    v18 = v13 - v12;
    v44 = v7 & 8;
    if( (v7 & 8) == 0 )
      goto LABEL_28;
    if( v5 != 1 )
      break;
    v22 = v12 & 0x1F;
    v23 = v18;
    v24 = (volatile signed __int32 *)(*(&stru_140C4DB30 + 295) + 4 * (v12 >> 5));
    if( v22 + v18 <= 0x20 )
    {
      if( v18 == 32 )
      {
        *v24 = -1;
        goto LABEL_65;
      }
      v25 = ((1 << v18) - 1) << v22;
      goto LABEL_64;
    }
    if( (v12 & 0x1F) != 0 )
    {
      _InterlockedOr(v24, ((1 << (32 - (v12 & 0x1F))) - 1) << v22);
      v23 = v18 - (32 - (unsigned int)(v12 & 0x1F));
      ++v24;
    }
    if( v23 >= 0x20 )
    {
      v26 = v23 >> 5;
      v23 += -32i64 * (v23 >> 5);
      do
      {
        *v24++ = -1;
        --v26;
      }
      while( v26 );
    }
    if( v23 )
    {
      v25 = (1 << v23) - 1;
LABEL_64:
      _InterlockedOr(v24, v25);
    }
LABEL_65:
    v4 = v18 + v16 + v12;
LABEL_31:
    if( v4 >= *(&stru_140C4DB30 + 292) )
      goto LABEL_32;
  }
  v4 = v12;
  v27 = v12;
  v16 = 0i64;
  v28 = -1i64;
  if( v18 > 0x100 )
    v18 = 256i64;
  v29 = &MmGetPfnDb()[v27];
  v30 = &v29[v18];
  p_u2 = &v29->u2;
  while( 1 )
  {
    v32 = v28;
    v33 = MiLockPageInline(v29);
    if( LOWORD(p_u2[1]._bf_0) || (unsigned __int8)((BYTE2(p_u2[1]._bf_0) & 7) - 2) > 2u )
    {
      _InterlockedAnd64(&p_u2->Lock, 0x7FFFFFFFFFFFFFFFui64);
      __writecr8(v33);
      if( v28 != -1 )
        goto LABEL_92;
      goto LABEL_85;
    }
    MiUnlinkPageFromList(v29, 0i64);
    if( !v34 )
      break;
    p_u2->_bf_0 &= 0xC000000000000000ui64;
    if( MiAddLockedPageCharge(v29, 0i64) == MiChargeFailed )
    {
      MiPfnReferenceCountIsZero(v29, v4, v35);
      goto LABEL_89;
    }
    v36 = v4 & 0x1F;
    LOBYTE(v37) = 1;
    v38 = (volatile signed __int32 *)(*(&stru_140C4DB30 + 295) + 4 * (v4 >> 5));
    if( v36 + 1 > 0x20 )
    {
      if( (v4 & 0x1F) == 0 )
        goto LABEL_83;
      _InterlockedAnd(v38++, ~(((1 << (32 - (v4 & 0x1F))) - 1) << v36));
      v37 = 1i64 - (32 - (unsigned int)(v4 & 0x1F));
      if( v37 >= 0x20 )
      {
        v39 = v37 >> 5;
        v37 += -32i64 * (v37 >> 5);
        do
        {
          *v38++ = 0;
          --v39;
        }
        while( v39 );
      }
      if( v37 )
LABEL_83:
        _InterlockedAnd(v38, -1 << v37);
    }
    else
    {
      _InterlockedAnd(v38, ~(1 << v36));
    }
    _InterlockedAnd64(&p_u2->Lock, 0x7FFFFFFFFFFFFFFFui64);
    __writecr8(v33);
    v28 = v4;
    if( v32 != -1 )
      v28 = v32;
LABEL_85:
    ++v29;
    p_u2 += 6;
    ++v4;
    if( v29 >= v30 )
    {
      v5 = v49;
      goto LABEL_90;
    }
  }
  MiDiscardTransitionPteEx(v29, 0i64);
LABEL_89:
  _InterlockedAnd64(&v29->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
  __writecr8(v33);
  v5 = 1;
  v49 = 1;
LABEL_90:
  if( v28 == -1 )
  {
    v3 = v43;
    v6 = v45;
    v7 = a2;
    goto LABEL_31;
  }
LABEL_92:
  v6 = v45;
  v18 = v4 - v28;
  v12 = v28;
LABEL_28:
  v6 += v18;
  v45 = v6;
  v43 = (*(__int64(__fastcall **)(unsigned __int64, unsigned __int64))(a1 + 16))(v12 << 12, v18 << 12);
  v3 = v43;
  if( v44 )
  {
    v40 = &MmGetPfnDb()[v12];
    v41 = &v40[v18];
    do
    {
      v42 = MiLockPageInline(v40);
      MiRemoveLockedPageChargeAndDecRef(v40);
      _InterlockedAnd64(&v40->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
      __writecr8(v42);
      ++v40;
    }
    while( v40 < v41 );
  }
  if( v43 >= 0 )
  {
    v5 = v49;
    v7 = a2;
    v4 = v16 + v12 + v18;
    goto LABEL_31;
  }
LABEL_32:
  *a3 = v6;
  return v3;
}

Referenced by:

MiMirrorBrownPhase