MiAllocateSlabEntry

_QWORD *__fastcall MiAllocateSlabEntry(INT64 a1, _MI_PARTITION *Partition, int a3){
  _QWORD *Pool; 
  _QWORD *v7; 
  INT64 *v8; 
  int v9; 
  unsigned int v10; 
  UINT64 v11; 
  _MMPFN *PfnDb; 
  _MMPFN *v13; 
  unsigned __int64 v14; 
  unsigned __int8 CurrentIrql; 
  _MIPFNBLINK *p_u2; 
  unsigned __int64 v17; 
  int v19[8]; 
  UINT64 PreferredNode; 
  UINT64 Flags; 
  UINT64 *StartingPfn; 
  __int64 v23; 
  INT64 *v24; 
  UINT64 SpinCount; 

  if( !MiSlabAllocatorRecentFailure(a1) )
  {
    Pool = MiAllocatePool(64i64, 0x90ui64, 0x6553694Dui64);
    v7 = Pool;
    if( Pool )
    {
      Pool[5] = a1;
      Pool[7] = Pool + 8;
      v8 = Pool + 3;
      *((_DWORD *)Pool + 12) = 512;
      v9 = a3 & 0x40;
      *((_DWORD *)Pool + 33) = 512;
      v10 = v9 != 0;
      if( (a3 & 0x40) == 0 )
        a3 |= 0x40u;
      do
      {
        v24 = v8;
        v23 = 0i64;
        LODWORD(StartingPfn) = a3 | 0x40000001;
        LODWORD(Flags) = 0x80000000;
        LODWORD(PreferredNode) = 0x80000000;
        if( MiFindContiguousPages(
               Partition,
               0i64,
               0xFFFFFFFFFui64,
               0x200ui64,
               0x200ui64,
               MiCached,
               PreferredNode,
               Flags,
               StartingPfn) >= 0 )
        {
          v11 = (unsigned __int64)*v8 >> 9;
          v7[4] = *v8 + 511;
          RtlInterlockedSetClearRunEx((_RTL_BITMAP_EX *)((char *)&stru_140C50B28 + 6040), v11, 1ui64);
          PfnDb = MmGetPfnDb();
          v13 = &PfnDb[*v8];
          v14 = (unsigned __int64)&PfnDb[v7[4]];
          CurrentIrql = KeGetCurrentIrql();
          __writecr8(2ui64);
          if( (unsigned __int64)v13 <= v14 )
          {
            p_u2 = &v13->u2;
            do
            {
              LODWORD(SpinCount) = 0;
              while( _interlockedbittestandset64((volatile signed __int32 *)p_u2, 0x3Fui64) )
              {
                do
                  KeYieldProcessorEx(&SpinCount);
                while( p_u2->_bf_0 < 0 );
              }
              _InterlockedOr(v19, 0);
              v17 = (p_u2->_bf_0 ^ ((unsigned __int64)(unsigned int)KiTbFlushTimeStamp << 56)) & 0xF00000000000000i64;
              LOWORD(p_u2[1]._bf_0) = 0;
              p_u2->_bf_0 ^= v17;
              MiReInitializeFreeSlabPfn((INT64)&p_u2[-3], a1);
              if( !*(_DWORD *)(a1 + 48) )
              {
                p_u2[2]._bf_0 = p_u2[2]._bf_0 & 0x8FFFFFFFFFFFFFFFui64 | 0x3000000000000000i64;
                MiAbortCombineScan((_MMPFN *)&p_u2[-3]);
              }
              _InterlockedAnd64(&p_u2->Lock, 0x7FFFFFFFFFFFFFFFui64);
              p_u2 += 6;
            }
            while( (unsigned __int64)&p_u2[-3] <= v14 );
          }
          __writecr8(CurrentIrql);
          MiUpdateSlabPagePlaceholderState(a1, *v8, 512i64, 1);
          return v7;
        }
        a3 &= ~0x40u;
        ++v10;
      }
      while( v10 < 2 );
      ExFreePoolWithTag(v7, 0);
      if( v9 )
        return 0i64;
    }
    *(_QWORD *)(a1 + 112) = KiQueryUnbiasedInterruptTime(1u);
  }
  return 0i64;
}

Referenced by:

MiReplenishSlabAllocator