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