MiRemovePageAnyColor

INT64 __fastcall MiRemovePageAnyColor(INT64 rcx0, UINT64 a2, UINT64 a3){
  _MI_PARTITION *v3; 
  __int16 v4; 
  __int64 v5; 
  _BOOL8 v6; 
  unsigned __int64 v7; 
  _QWORD *v8; 
  unsigned int v9; 
  unsigned __int64 v10; 
  int v11; 
  unsigned __int64 v12; 
  int v13; 
  unsigned int v14; 
  unsigned __int64 v15; 
  _DWORD *v16; 
  int v17; 
  unsigned int v18; 
  INT64 result; 
  unsigned int v20; 
  int v21; 
  unsigned int v22; 
  char v23; 
  __int64 v24; 
  INT16 a5; 
  _MMLISTS PageType; 
  BOOL v28; 
  a5 = a3;
  v3 = (_MI_PARTITION *)rcx0;
  v4 = a3;
  LODWORD(v5) = a2;
  v6 = (a3 & 2) == 0;
  v7 = *(_QWORD *)(rcx0 + 16) + 4544 * ((unsigned __int64)(unsigned int)a2 >> byte_140C4DBCC);
  if( (unsigned int)MmNumberOfChannels > 1 )
    v8 = (_QWORD *)(v7
                  + 8
                  * (v6
                   + 2i64 * (unsigned __int8)(MiChannelMaximumPowerOf2Mask & ((unsigned int)v5 >> byte_140C4DBCD))
                   + 527));
  else
    v8 = (_QWORD *)(v7 + 4128 + 8 * v6);
  if( !*v8 )
    return 0i64;
  v9 = dword_140C4DC38;
  v10 = 0i64;
  v11 = v5;
  v12 = v7 + 16 * (v6 + 252);
  v24 = *((_QWORD *)v3 + v6 + 272);
  v13 = 0;
  v14 = dword_140C4DC38 + 1;
  while( 1 )
  {
    while( 1 )
    {
      v15 = (unsigned int)v5 & v9;
      v16 = (_DWORD *)(*(_QWORD *)(v12 + 8) + 4 * (v15 >> 5));
      if( (_DWORD *)v10 != v16 )
      {
        v10 = *(_QWORD *)(v12 + 8) + 4 * ((unsigned __int64)((unsigned int)v5 & v9) >> 5);
        v13 = *v16 & (-1 << (v15 & 0x1F));
        if( (v4 & 0x4000) != 0 )
        {
          v21 = 0;
          v22 = (unsigned __int8)v11 & (unsigned __int8)v9 & 0xF;
          do
          {
            v23 = v22 & 0x1F;
            v22 += 16;
            v21 |= 1 << v23;
          }
          while( v22 < 0x20 && v22 <= v9 );
          v13 &= ~v21;
          v3 = (_MI_PARTITION *)rcx0;
        }
        else if( ((v15 ^ v14) & 0xFFFFFFFFFFFFFFE0ui64) == 0 )
        {
          v13 &= (1 << (v14 & 0x1F)) - 1;
        }
      }
      v17 = v5 & v9 & 0xFFFFFFE0;
      if( v13 )
        break;
      v20 = v17 + 32;
      if( v20 >= v14 )
      {
        v10 = 0i64;
        if( !v11 || v14 != v9 + 1 )
          return 0i64;
        v14 = v11 & v9;
        LODWORD(v5) = v11 & ~v9;
      }
      else
      {
        LODWORD(v5) = v20 + (~v9 & v5);
      }
    }
    _BitScanForward(&v18, v13);
    PageType = v6;
    v28 = v6;
    v5 = v18 + v17 + (~v9 & (unsigned int)v5);
    v13 &= ~(1 << v18);
    result = MiSlistGetFreePage(v3, (_MMLISTS)&PageType, (unsigned int)v5);
    if( result )
      return result;
    result = (INT64)MiGetPerfectColorHeadPage(rcx0, (_QWORD *)(v24 + 40 * v5), (unsigned int)v5, v6, a5);
    if( result == 1 )
      break;
    if( result )
      return result;
    v3 = (_MI_PARTITION *)rcx0;
    v4 = a5;
  }
  return 1i64;
}

Referenced by:

MiGetFreeOrZeroPageAnyColor