MiAllocateSlabEntry

_QWORD *__fastcall MiAllocateSlabEntry(INT64 a1, UINT64 PageFrameIndex, INT64 a3){
  int v3; 
  __int64 v6; 
  _QWORD *v7; 
  INT64 *v8; 
  int v9; 
  __int64 v10; 
  UINT64 v11; 
  _MMPFN *PfnDb; 
  char *v13; 
  unsigned __int64 v14; 
  unsigned __int8 CurrentIrql; 
  char *v16; 
  unsigned __int64 v17; 
  int v19[8]; 
  UINT64 PreferredNode; 
  UINT64 PreferredChannel; 
  UINT64 Flags; 
  INT64 *v23; 
  UINT64 SpinCount; 
  v3 = a3;
  if( !(unsigned int)MiSlabAllocatorRecentFailure(a1) )
  {
    LODWORD(v6) = MiAllocatePool((struct _SLIST_ENTRY *)0x40);
    v7 = (_QWORD *)v6;
    if( v6 )
    {
      *(_QWORD *)(v6 + 40) = a1;
      *(_QWORD *)(v6 + 56) = v6 + 64;
      v8 = (INT64 *)(v6 + 24);
      *(_DWORD *)(v6 + 48) = 512;
      v9 = v3 & 0x40;
      *(_DWORD *)(v6 + 132) = 512;
      v10 = v9 != 0;
      if( (v3 & 0x40) == 0 )
        v3 |= 0x40u;
      do
      {
        v23 = v8;
        LODWORD(Flags) = v3 | 0x40000001;
        LODWORD(PreferredChannel) = 0x80000000;
        LODWORD(PreferredNode) = 0x80000000;
        if( (int)MiFindContiguousPages(
                    (_MI_PARTITION *)PageFrameIndex,
                    0i64,
                    0xFFFFFFFFFui64,
                    0x200ui64,
                    0x200ui64,
                    MiCached,
                    PreferredNode,
                    PreferredChannel,
                    Flags,
                    0i64) >= 0 )
        {
          v11 = (unsigned __int64)*v8 >> 9;
          v7[4] = *v8 + 511;
          RtlInterlockedSetClearRunEx((INT64)&qword_140C522C0, v11, 1ui64);
          PfnDb = MmGetPfnDb();
          v13 = (char *)PfnDb + 48 * *v8;
          v14 = (unsigned __int64)PfnDb + 48 * v7[4];
          CurrentIrql = KeGetCurrentIrql();
          __writecr8(2ui64);
          if( (unsigned __int64)v13 <= v14 )
          {
            v16 = v13 + 24;
            do
            {
              LODWORD(SpinCount) = 0;
              while( _interlockedbittestandset64((volatile signed __int32 *)v16, 0x3Fui64) )
              {
                do
                  KeYieldProcessorEx(&SpinCount);
                while( *(__int64 *)v16 < 0 );
              }
              _InterlockedOr(v19, 0);
              v17 = (*(_QWORD *)v16 ^ ((unsigned __int64)(unsigned int)KiTbFlushTimeStamp << 56)) & 0xF00000000000000i64;
              *((_WORD *)v16 + 4) = 0;
              *(_QWORD *)v16 ^= v17;
              MiReInitializeFreeSlabPfn((INT64)(v16 - 24), a1);
              if( !*(_DWORD *)(a1 + 48) )
              {
                *((_QWORD *)v16 + 2) = *((_QWORD *)v16 + 2) & 0x8FFFFFFFFFFFFFFFui64 | 0x3000000000000000i64;
                MiAbortCombineScan((INT64)(v16 - 24));
              }
              _InterlockedAnd64((volatile signed __int64 *)v16, 0x7FFFFFFFFFFFFFFFui64);
              v16 += 48;
            }
            while( (unsigned __int64)(v16 - 24) <= v14 );
          }
          __writecr8(CurrentIrql);
          MiUpdateSlabPagePlaceholderState(a1, *v8, 512i64, 1i64);
          return v7;
        }
        v3 &= ~0x40u;
        LODWORD(v10) = v10 + 1;
      }
      while( (unsigned int)v10 < 2 );
      ExFreePoolWithTag(v7, 0);
      if( v9 )
        return 0i64;
    }
    *(_QWORD *)(a1 + 112) = KiQueryUnbiasedInterruptTime(1u);
  }
  return 0i64;
}

Referenced by:

MiReplenishSlabAllocator