MmAllocateNonChargedSecurePages

VOID __fastcall MmAllocateNonChargedSecurePages(UINT64 **a1, UINT64 *a2, INT64 *a3){
  UINT64 v5; 
  UINT64 v6; 
  unsigned int v7; 
  signed __int32 v8; 
  unsigned int v9; 
  INT64 SlabPage; 
  char *v11; 
  unsigned __int64 v12; 
  INT64 v13; 
  __int128 v14; 
  v14 = 0i64;
  LODWORD(v5) = MiPartitionObjectToPartition(a1);
  v6 = v5;
  v7 = 0;
  MiInitializePageColorBase(0i64, 0i64, (INT64)&v14);
  if( *(_DWORD *)a2 )
  {
    do
    {
      v8 = _InterlockedExchangeAdd((volatile signed __int32 *)v14, 1u);
      v9 = DWORD2(v14) & v8 | HIDWORD(v14);
      if( (*(_DWORD *)(v6 + 4) & 8) != 0 )
      {
        LODWORD(v13) = 0;
        SlabPage = MiGetSlabPage(v6, 24, 0i64, (INT64 *)0xFFFFFFFFFFFFFFFFi64, v13);
      }
      else
      {
        SlabPage = -1i64;
      }
      if( SlabPage == -1 )
      {
        SlabPage = MiGetPage((_MI_PARTITION *)v6, v9, 0i64);
        if( SlabPage == -1 )
          break;
      }
      v11 = (char *)MmGetPfnDb() + 48 * SlabPage;
      *(_QWORD *)v11 = 0i64;
      *((_QWORD *)v11 + 2) = ZeroPte;
      *((_QWORD *)v11 + 5) = *((_QWORD *)v11 + 5) & 0x7FFFFFF000000000i64 | 0xFFFFFFFFDi64;
      _InterlockedIncrement64((volatile signed __int64 *)(v6 + 432));
      v12 = (unsigned __int8)MiLockPageInline((INT64)v11);
      MiInitializeMdlPfn((INT64)v11, 131584i64);
      _InterlockedAnd64((volatile signed __int64 *)v11 + 3, 0x7FFFFFFFFFFFFFFFui64);
      __writecr8(v12);
      *a3 = SlabPage;
      ++v7;
      ++a3;
    }
    while( v7 < *(_DWORD *)a2 );
  }
  *(_DWORD *)a2 = v7;
}

Referenced by:

PspIumReplenishPartitionPages