MiGetLargePagesDemoteAsNeeded

NTSTATUS __stdcall MiGetLargePagesDemoteAsNeeded(
        INT64 a1,
        UINT64 a2,
        UINT64 a3,
        UINT64 a4,
        INT64 a5,
        INT64 a6,
        INT64 a7){
  int v7; 
  INT64 v8; 
  __int64 v9; 
  unsigned int v10; 
  unsigned int v11; 
  __int64 v12; 
  int v13; 
  __int64 *v14; 
  unsigned int v15; 
  _QWORD *v16; 
  UINT64 v17; 
  unsigned int v18; 
  INT64 v19; 
  INT64 LargePage; 
  signed __int32 v21; 
  INT64 v22; 
  __int64 v23; 
  UINT64 v25; 
  INT64 v26; 
  INT64 v27; 
  INT64 v28; 
  _MI_COLOR_BASE ColorBase[4]; 
  UINT64 v31; 
  UINT64 v32; 

  v32 = a4;
  v31 = a3;
  v7 = a2;
  v8 = a1;
  v9 = *(_QWORD *)(a1 + 16) + 4544i64 * (unsigned int)a2;
  if( !*(_QWORD *)(v9 + 4176) && (_DWORD)InitializationPhase )
  {
LABEL_22:
    LODWORD(LargePage) = 0;
  }
  else
  {
    v10 = a6;
    v11 = 0;
    v12 = 0i64;
    v13 = !(a6 & 1) + 1;
    if( (a6 & 1) == 0 )
      v10 = a6 | 1;
    while( 1 )
    {
      v14 = MiLargePageSizes;
      v15 = 0;
      v16 = (_QWORD *)(v9 + 16 * (v12 + 1));
      do
      {
        v17 = *v14;
        if( a3 >= *v14 )
        {
          if( v17 < a4 )
            break;
          v18 = v15;
          if( v11 )
            v18 = v11;
          v11 = v18;
          if( v16[1] || *v16 )
          {
            if( (_DWORD)a5 )
              v19 = a3 / v17;
            else
              v19 = 1i64;
            LODWORD(v28) = a7;
            LODWORD(v27) = 4;
            LODWORD(v26) = 0;
            LODWORD(v25) = v7;
            LODWORD(LargePage) = MiGetFreeZeroLargePages(v8, v15, v19, v10, v25, v26, v27, v28);
            if( LargePage )
              return LargePage;
            v8 = a1;
            a3 = v31;
            a4 = v32;
          }
        }
        ++v15;
        ++v14;
        v16 += 134;
      }
      while( v15 < 3 );
      if( v11 )
      {
        *(_OWORD *)ColorBase = 0i64;
        MiInitializePageColorBase(0i64, (unsigned int)(v7 + 1), ColorBase);
        v21 = _InterlockedExchangeAdd(*(volatile signed __int32 **)ColorBase, 1u);
        LargePage = MiGetLargePage(
                      v22,
                      v11,
                      (_MI_PFN_CACHE_ATTRIBUTE)a7,
                      ColorBase[3] | (unsigned int)v21 & ColorBase[2],
                      v10,
                      v23);
        if( LargePage )
          break;
      }
      if( !--v13 )
        goto LABEL_22;
      v8 = a1;
      v10 &= ~1u;
      a3 = v31;
      v12 = 1i64;
      a4 = v32;
    }
  }
  return LargePage;
}

Referenced by:

MiFindLargeNodePage
MiGetFastLargePages
MiGetLargePageChain
MiTimeSingleLargePageZeroWorker