MmAllocateIndependentPagesEx

__int64 __fastcall MmAllocateIndependentPagesEx(unsigned __int64 a1, int a2, _QWORD *a3, unsigned int a4){
  UINT64 v6; 
  _MMPTE *v7; 
  _KTBFLUSH_TYPE v8; 
  unsigned __int64 v9; 
  UINT64 v10; 
  unsigned __int64 v11; 
  UINT64 v12; 
  unsigned int v13; 
  __int64 v14; 
  unsigned int v15; 
  unsigned int NextPageColor; 
  __int64 v17; 
  UINT64 v18; 
  __int64 v19; 
  unsigned __int64 v20; 
  int v21; 
  int v22; 
  __int64 v23; 
  unsigned int v25; 
  _QWORD *v26; 
  __int64 v27; 
  NTSTATUS HasShadow; 
  UINT64 v29; 
  __int64 v30; 
  __int64 v31; 
  __int128 ColorBase; 
  UINT64 v33[4]; 
  __int128 v34; 
  _BOOL4 v35; 

  v6 = (a1 >> 12) + ((a1 & 0xFFF) != 0);
  ColorBase = 0i64;
  memset(v33, 0, sizeof(v33));
  v34 = 0i64;
  v7 = MiReservePtes((_MI_SYSTEM_PTE_TYPE *)((char *)&stru_140C4DB30 + 4432), (unsigned int)v6);
  if( !v7 )
    return 0i64;
  if( !MiObtainPoolCharges(v6, 1i64) )
  {
    MiReleasePtes((_MI_SYSTEM_PTE_TYPE *)((char *)&stru_140C4DB30 + 4432), v7, (unsigned int)v6, v8);
    return 0i64;
  }
  v35 = a3 && (dword_140C50AC4[0] & 8) != 0 && (a2 == -1 || KeNumberNodes == 1);
  v31 = (__int64)(((_QWORD)v7 << 25) - ((_QWORD)MmGetPteBase() << 25)) >> 16;
  LODWORD(v9) = MiMakeValidPte((_XSTATE_CONFIGURATION *)v7, 0i64, 2684354564i64);
  v10 = 0i64;
  v11 = v9;
  if( a2 != -1 )
    v10 = (unsigned int)(a2 + 1);
  MiInitializePageColorBase(0i64, v10, (_MI_COLOR_BASE *)&ColorBase);
  v12 = 0i64;
  v30 = 0i64;
  do
  {
    v13 = 0;
    NextPageColor = MiGetNextPageColor((INT64)&ColorBase);
    if( v35 )
    {
      if( a3 != (_QWORD *)-1i64 )
      {
        v25 = 0;
        if( !a4 )
          goto LABEL_9;
        v26 = a3;
        while( v14 != *v26 >> 12 )
        {
          v25 += v15;
          ++v26;
          if( v25 >= a4 )
            goto LABEL_9;
        }
      }
      v13 = v15;
    }
LABEL_9:
    while( 1 )
    {
      if( v13 )
      {
        LODWORD(v29) = 0;
        LODWORD(v27) = MiGetSlabPage((INT64)&Irp, v15, 0i64, (INT64 *)0xFFFFFFFFFFFFFFFFi64, v29);
        v19 = v27;
        if( v27 != -1 )
          break;
      }
      LODWORD(v17) = MiGetPage((ULONG_PTR *)&Irp.Core.PartitionId, NextPageColor, 8ui64);
      v19 = v17;
      if( v17 != -1 )
        goto LABEL_11;
      MiWaitForFreePage(&Irp, v18);
      v15 = 1;
    }
    ++v12;
LABEL_11:
    v11 ^= (v11 ^ (v19 << 12)) & 0xFFFFFFFFF000i64;
    MiInitializePfn((_RTL_BITMAP_EX *)&MmGetPfnDb()[v19], &v7->u.Long, 4ui64);
    v20 = v11;
    v21 = 0;
    LOBYTE(v22) = MiPteInShadowRange((UINT64)v7);
    if( !v22 )
    {
      v23 = 1i64;
      goto LABEL_13;
    }
    HasShadow = MiPteHasShadow();
    v23 = 1i64;
    if( HasShadow )
    {
      v21 = 1;
      if( *(&stru_140C4DB30 + 537) )
        goto LABEL_13;
    }
    else if( (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) == 0 )
    {
      goto LABEL_13;
    }
    if( (v11 & 1) != 0 )
      v20 = v11 | 0x8000000000000000ui64;
LABEL_13:
    v7->u.Long = v20;
    if( v21 )
      MiWritePteShadow();
    ++v7;
    v30 += v23;
    v6 -= v23;
  }
  while( v6 );
  if( v12 )
  {
    v33[3] = v12;
    v33[0] = v12;
    *(_OWORD *)&v33[1] = 0i64;
    v34 = 0i64;
    MiReturnPoolCharges(v33, (unsigned int)v23);
  }
  return v31;
}

Referenced by:

ExCreatePoolTagTable
HvlInitializeProcessor
HvlpPreallocatePageListResources
IopLiveDumpAllocateDumpBuffers
IopLiveDumpAllocateExtraBuffers
IopLiveDumpAllocateIptBuffers
KeStartAllProcessors
KiStartDynamicProcessor
MmAllocateIndependentPages
MmAllocateIsrStack
PspInitPhase0