MiGetSlabPage

NTSTATUS __stdcall MiGetSlabPage(INT64 a1, UINT64 a2, UINT64 a3, INT64 *a4, UINT64 a5){
  INT64 v7; 
  INT64 v8; 
  __int64 v9; 
  NTSTATUS v10; 

  LODWORD(v7) = MiGetSlabAllocator(a1, (unsigned int)a3, a2);
  v8 = v7;
  if( (unsigned __int64)a4 - 1 <= 0xFFFFFFFFFFFFFFFDui64 )
    *a4 = 0i64;
  while( 1 )
  {
    LODWORD(v9) = MiGetPageFromSlabAllocator(v8);
    v10 = v9;
    if( v9 != -1 )
      break;
    if( *(_DWORD *)(v8 + 48) == 1 || MiSlabAllocatorRecentFailure(v8) )
      return -1;
    if( a4 != (INT64 *)-1i64 )
    {
      if( a4 )
        *a4 = v8;
      return v10;
    }
    if( !MiReplenishSlabAllocator(v8, a1, 1ui64, (unsigned int)a5) )
      return -1;
  }
  return v10;
}

Referenced by:

MiAllocateDriverPage
MiCompleteSecureProcessFault
MiFinalizeImageHeaderPage
MiGetHardFaultPages
MiPfPrepareReadList
MiPfPrepareSequentialReadList
MiPfPutPagesInTransition
MiResolveMappedFileFault
MiWalkEntireImage
MmAllocateIndependentPagesEx
MmAllocateNonChargedSecurePages
MmAllocateSecureKernelPages