MiGetLargePage
INT64 __fastcall MiGetLargePage(INT64 a1, UINT64 a2, UINT64 a3, UINT64 a4, INT64 a5, INT64 a6){
unsigned int v7;
unsigned int v8;
unsigned int v9;
INT64 v10;
unsigned __int8 CurrentIrql;
unsigned int v12;
INT64 FreeZeroLargePages;
UINT8 *v14;
INT64 v15;
int v17;
_BOOL8 v18;
__int64 v19;
UINT64 v20;
INT64 v21;
INT64 v22;
INT64 v23;
_MI_PFN_CACHE_ATTRIBUTE v24;
UINT64 v25[3];
INT64 result;
v24 = (int)a3;
v7 = a4;
v8 = a2;
*(UINT64 *)((char *)&v25[1] + 4) = a6;
LODWORD(v25[0]) = a4;
memset((INT64)&result, 0i64);
v9 = v7 >> byte_140C4DBCC;
v10 = *(_QWORD *)(a1 + 16) + 4544i64 * (v7 >> byte_140C4DBCC);
if( !*(_QWORD *)(v10 + 4176) && (MiFlags & 0x30) != 0 )
return 0i64;
CurrentIrql = KeGetCurrentIrql();
v12 = v8 + 1;
while( 1 )
{
--v12;
LODWORD(v23) = v24;
LODWORD(v22) = 4;
LODWORD(v21) = v7;
LODWORD(v20) = v9;
FreeZeroLargePages = MiGetFreeZeroLargePages(a1, v12, 1i64, (unsigned int)a5 | 0x20, v20, v21, v22, v23);
v15 = FreeZeroLargePages;
if( FreeZeroLargePages )
break;
v7 = v25[0];
if( !v12 )
return 0i64;
}
v17 = *(_DWORD *)(FreeZeroLargePages + 16);
v18 = (v17 & 0x3E0) != 0i64;
HIDWORD(v25[0]) = (v17 & 0x3E0) != 0i64;
if( v12 == v8 )
{
MiLargePageMovesComplete(a1, v9, v14);
}
else
{
MiInsertDemotedPages(v10, v15, v12, v8, v15);
LODWORD(v25[0]) = 0;
while( _interlockedbittestandset64((volatile signed __int32 *)(v15 + 24), 0x3Fui64) )
{
do
KeYieldProcessorEx(v25);
while( *(__int64 *)(v15 + 24) < 0 );
}
_InterlockedAnd64((volatile signed __int64 *)(v15 + 24), 0x7FFFFFFFFFFFFFFFui64);
}
__writecr8(CurrentIrql);
v19 = (v15 - (__int64)MmGetPfnDb()) / 48;
if( !v18 && (MiFlags & 0x80u) != 0 && (++dword_140C4E50C & MmPageValidationFrequency) == 0 )
MiArePageContentsZero((PVOID)v19);
MiIsFreeZeroPfnCold(v15);
if( HIDWORD(v25[0]) == 1 )
{
if( HIDWORD(result) )
MiNotifyPageHeat(&result);
if( v12 == 3 )
MiZeroPhysicalPage(v19, 0i64, v24);
else
MiZeroLargePage(v15, v8, (unsigned int)v24);
*(_QWORD *)(v15 + 16) = ZeroPte;
}
return v15;
}Referenced by:
MiGetClusterPage
MiGetLargePagesDemoteAsNeeded
MiGetPageChain
MiIdealClusterPage
MiPrefetchPreallocatePages
MiProcessVaContiguityInformation
MiResolvePrivateZeroFault