MiAllocateTopLevelPage

UINT64 __fastcall MiAllocateTopLevelPage(VOID *a1, UINT64 a2){
  unsigned int v4; 
  __int64 v5; 
  _MI_PARTITION *ProcessPartition; 
  unsigned int NextPageColor; 
  UINT64 i; 
  UINT64 v9; 
  UINT64 v10; 
  UINT64 v11; 
  _MMPFN *v12; 
  __int64 v13; 
  unsigned __int64 v14; 
  __int64 v15; 
  __int64 v16; 
  int v17; 
  unsigned __int64 *v18; 
  int v19; 
  _MI_COLOR_BASE ColorBase[10]; 

  *(_OWORD *)ColorBase = 0i64;
  ProcessPartition = MiGetProcessPartition(a1, (_EPROCESS *)a2);
  MiInitializePageColorBase((_MMSUPPORT_INSTANCE *)(v5 + 1664), v4, ColorBase);
  NextPageColor = MiGetNextPageColor((INT64)ColorBase);
  for( i = NextPageColor; ; i = NextPageColor )
  {
    LODWORD(v9) = MiGetPage((ULONG_PTR *)&ProcessPartition->Core.PartitionId, i, 0x302ui64);
    v11 = v9;
    if( v9 != -1i64 )
      break;
    MiWaitForFreePage(ProcessPartition, v10);
  }
  v12 = &MmGetPfnDb()[v9];
  MiSetPfnLink(v12, 0i64);
  LODWORD(v13) = MiMakeValidPte(0i64, v11, 2415919110i64);
  v12->u1.$976DF529DAC3D73085C9E386D94B91E6::$E228DCF3D8940E384DBC5EFCA756D8B6::_bf_0 = 0i64;
  v12->u4._bf_0 ^= (v11 ^ v12->u4._bf_0) & 0xFFFFFFFFFi64;
  v14 = v13 & 0xFFFFFFFFFFFFFEFFui64;
  MiSetPageTablePfnBuddy((INT64)v12, (INT64)a1, 0i64);
  MiInitializePfnForOtherProcess(v11, MmGetPxeSelfRef(), v11, 0x200ui64);
  LODWORD(v15) = MiMakeValidPte(0i64, v11, 2684354564i64);
  v16 = v15;
  LOBYTE(v17) = MiPteInShadowRange(a2);
  if( v17 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (v16 & 1) != 0 )
    v16 |= 0x8000000000000000ui64;
  *(_QWORD *)a2 = v16;
  v18 = (unsigned __int64 *)(((__int64)((a2 << 25) - ((_QWORD)MmGetPteBase() << 25)) >> 16)
                           + 8 * (((unsigned __int64)MmGetPxeSelfRef() >> 3) & 0x1FF));
  LOBYTE(v19) = MiPteInShadowRange((UINT64)v18);
  if( v19 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (v14 & 1) != 0 )
    v14 |= 0x8000000000000000ui64;
  *v18 = v14;
  return v11;
}

Referenced by:

MmCreateProcessAddressSpace