MiRemovePageAnyColor

NTSTATUS __stdcall MiRemovePageAnyColor(_MI_PARTITION *Partition, UINT64 a2, UINT64 a3){
  _MI_PARTITION *v3; 
  __int16 v4; 
  __int64 v5; 
  _BOOL8 v6; 
  _MI_NODE_INFORMATION *v7; 
  volatile unsigned __int64 *v8; 
  unsigned int v9; 
  unsigned __int64 v10; 
  int v11; 
  _RTL_BITMAP *v12; 
  int v13; 
  unsigned int v14; 
  unsigned __int64 v15; 
  unsigned int *v16; 
  int v17; 
  unsigned int v18; 
  __int64 PerfectColorHeadPage; 
  unsigned int v20; 
  int v21; 
  unsigned int v22; 
  char v23; 
  UINT8 *v25; 
  _MMPFNLIST *v26; 
  int v28; 
  _MMLISTS PageType; 
  _BOOL4 v30; 

  v28 = a3;
  v3 = Partition;
  v4 = a3;
  LODWORD(v5) = a2;
  v6 = (a3 & 2) == 0;
  v7 = &Partition->Core.NodeInformation[(unsigned __int64)(unsigned int)a2 >> *(&stru_140C4DB30 + 156)];
  if( (unsigned int)MmNumberOfChannels > 1 )
    v8 = &v7->ChannelFreeCount[(unsigned __int8)(MiChannelMaximumPowerOf2Mask & ((unsigned int)v5 >> *(&stru_140C4DB30 + 157)))][v6];
  else
    v8 = &v7->FreeCount[v6];
  if( *v8 )
  {
    v9 = *(&stru_140C4DB30 + 66);
    v10 = 0i64;
    v11 = v5;
    v12 = &v7->FreePageListHeadsBitmap[v6];
    v26 = v3->PageLists.FreePagesByColor[v6];
    v13 = 0;
    v14 = *(&stru_140C4DB30 + 66) + 1;
    while( 1 )
    {
      while( 1 )
      {
        v15 = (unsigned int)v5 & v9;
        v16 = &v12->Buffer[v15 >> 5];
        if( (unsigned int *)v10 != v16 )
        {
          v10 = (unsigned __int64)&v12->Buffer[(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 = Partition;
          }
          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 )
            goto LABEL_14;
          v14 = v11 & v9;
          LODWORD(v5) = v11 & ~v9;
        }
        else
        {
          LODWORD(v5) = v20 + (~v9 & v5);
        }
      }
      _BitScanForward(&v18, v13);
      PageType = v6;
      v30 = v6;
      v5 = v18 + v17 + (~v9 & (unsigned int)v5);
      v13 &= ~(1 << v18);
      LODWORD(PerfectColorHeadPage) = MiSlistGetFreePage(v3, (_MMLISTS)&PageType, (unsigned int)v5);
      if( PerfectColorHeadPage )
        return PerfectColorHeadPage;
      LODWORD(v25) = v28;
      PerfectColorHeadPage = MiGetPerfectColorHeadPage(Partition, &v26[v5], v5, (_MMLISTS)v6, v25);
      if( PerfectColorHeadPage == 1 )
        break;
      if( PerfectColorHeadPage )
        return PerfectColorHeadPage;
      v3 = Partition;
      v4 = v28;
    }
    LODWORD(PerfectColorHeadPage) = 1;
  }
  else
  {
LABEL_14:
    LODWORD(PerfectColorHeadPage) = 0;
  }
  return PerfectColorHeadPage;
}

Referenced by:

MiGetFreeOrZeroPageAnyColor