MmAllocateNonChargedSecurePages

VOID __stdcall MmAllocateNonChargedSecurePages(UINT64 **a1, UINT64 *a2, INT64 *a3){
  INT64 v5; 
  INT64 v6; 
  unsigned int v7; 
  signed __int32 v8; 
  unsigned int v9; 
  INT64 v10; 
  INT64 v11; 
  INT64 v12; 
  _MMPFN *v13; 
  unsigned __int64 v14; 
  UINT64 v15; 
  __int128 ColorBase; 

  ColorBase = 0i64;
  LODWORD(v5) = MiPartitionObjectToPartition(a1);
  v6 = v5;
  v7 = 0;
  MiInitializePageColorBase(0i64, 0i64, (_MI_COLOR_BASE *)&ColorBase);
  if( *(_DWORD *)a2 )
  {
    do
    {
      v8 = _InterlockedExchangeAdd((volatile signed __int32 *)ColorBase, 1u);
      v9 = DWORD2(ColorBase) & v8 | HIDWORD(ColorBase);
      if( (*(_DWORD *)(v6 + 4) & 8) != 0 )
      {
        LODWORD(v15) = 0;
        LODWORD(v10) = MiGetSlabPage(v6, 0x18ui64, 0i64, (INT64 *)0xFFFFFFFFFFFFFFFFi64, v15);
        v11 = v10;
      }
      else
      {
        v11 = -1i64;
      }
      if( v11 == -1 )
      {
        LODWORD(v12) = MiGetPage((ULONG_PTR *)v6, v9, 0i64);
        v11 = v12;
        if( v12 == -1 )
          break;
      }
      v13 = &MmGetPfnDb()[v11];
      v13->u1.$976DF529DAC3D73085C9E386D94B91E6::$E228DCF3D8940E384DBC5EFCA756D8B6::_bf_0 = 0i64;
      v13->OriginalPte = ZeroPte;
      v13->u4._bf_0 = v13->u4._bf_0 & 0x7FFFFFF000000000i64 | 0xFFFFFFFFDi64;
      _InterlockedIncrement64((volatile signed __int64 *)(v6 + 432));
      v14 = MiLockPageInline(v13);
      MiInitializeMdlPfn(v13, 0x20200ui64);
      _InterlockedAnd64(&v13->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
      __writecr8(v14);
      *a3 = v11;
      ++v7;
      ++a3;
    }
    while( v7 < *(_DWORD *)a2 );
  }
  *(_DWORD *)a2 = v7;
}

Referenced by:

PspIumReplenishPartitionPages