MiGetFastLargePages
INT64 __fastcall MiGetFastLargePages(
UINT64 PageFrameIndex,
INT64 a2,
INT64 a3,
INT64 a4,
UINT64 ProtectionMask,
INT64 a6){
UINT64 v7;
UINT64 v8;
UINT64 v9;
int v10;
int v11;
UINT64 v12;
INT64 LargePagesDemoteAsNeeded;
char *v14;
__int64 v15;
INT64 v17;
INT64 v18;
INT64 v19;
INT64 v20;
KeGetCurrentIrql();
LODWORD(v20) = MiProtectionToCacheAttribute((unsigned int)ProtectionMask);
v11 = v10 | 1;
if( (a6 & 4) == 0 )
v11 = v10;
LODWORD(v19) = v11;
LODWORD(v17) = 1;
v12 = -1i64;
LargePagesDemoteAsNeeded = MiGetLargePagesDemoteAsNeeded(PageFrameIndex, v7, v8, v9, v17, v19, v20);
v14 = (char *)LargePagesDemoteAsNeeded;
if( LargePagesDemoteAsNeeded )
{
do
{
v15 = (v14 - (char *)MmGetPfnDb()) / 48;
if( v14 == (char *)LargePagesDemoteAsNeeded )
v12 = MiLargePageSizes[(unsigned int)MiGetPfnPageSizeIndex((INT64)v14)];
LODWORD(v18) = 1;
MiUpdateLargePageBitMap(PageFrameIndex, v15, v12, 1ui64, v18);
v14 = *(char **)v14;
}
while( v14 );
}
return LargePagesDemoteAsNeeded;
}Referenced by:
MiAllocateLargeZeroPages