MiGetSlabPage

INT64 __fastcall MiGetSlabPage(UINT64 a1, CHAR a2, UINT64 a3, INT64 *a4, INT64 a5){
  INT64 SlabAllocator; 
  INT64 PageFromSlabAllocator; 
  SlabAllocator = MiGetSlabAllocator(a1, (unsigned int)a3, a2);
  if( (unsigned __int64)a4 - 1 <= 0xFFFFFFFFFFFFFFFDui64 )
    *a4 = 0i64;
  while( 1 )
  {
    PageFromSlabAllocator = MiGetPageFromSlabAllocator(SlabAllocator);
    if( PageFromSlabAllocator != -1 )
      break;
    if( *(_DWORD *)(SlabAllocator + 48) == 1 || (unsigned int)MiSlabAllocatorRecentFailure(SlabAllocator) )
      return -1i64;
    if( a4 != (INT64 *)-1i64 )
    {
      if( a4 )
        *a4 = SlabAllocator;
      return PageFromSlabAllocator;
    }
    if( !(unsigned int)MiReplenishSlabAllocator(SlabAllocator, a1, 1ui64, (unsigned int)a5) )
      return -1i64;
  }
  return PageFromSlabAllocator;
}

Referenced by:

MiAllocateDriverPage
MiFinalizeImageHeaderPage
MiGetHardFaultPages
MiPfPrepareReadList
MiPfPrepareSequentialReadList
MiPfPutPagesInTransition
MiResolveMappedFileFault
MiWalkEntireImage
MmAllocateIndependentPagesEx
MmAllocateNonChargedSecurePages
MmAllocateSecureKernelPages