MiMarkLargePageRanges
VOID __stdcall MiMarkLargePageRanges(){
unsigned int NumberOfRuns;
_MMPFN *PfnDb;
__int64 v2;
unsigned __int64 BasePage;
unsigned __int64 v4;
unsigned __int64 v5;
__int64 v6;
UINT64 v7;
unsigned __int64 v8;
unsigned __int64 v9;
UINT64 v10;
unsigned __int64 v11;
UINT64 BitsMustBeChanged;
MiMarkLargePageMappings();
NumberOfRuns = MmPhysicalMemoryBlock->NumberOfRuns;
if( MmPhysicalMemoryBlock->NumberOfRuns )
{
PfnDb = MmGetPfnDb();
v2 = NumberOfRuns;
do
{
--v2;
--NumberOfRuns;
BasePage = MmPhysicalMemoryBlock->Run[v2].BasePage;
v4 = (BasePage + MmPhysicalMemoryBlock->Run[v2].PageCount) & 0xFFFFFFFFFFFFFE00ui64;
v5 = (BasePage + 511) & 0xFFFFFFFFFFFFFE00ui64;
if( v5 )
{
if( v5 < v4 )
{
v6 = -1i64;
v7 = 0i64;
v8 = (unsigned __int64)&PfnDb[v5];
v9 = v8 + 48 * (v4 - v5);
if( v8 < v9 )
{
do
{
if( (*(_QWORD *)(v8 + 24) & 0x3FFFFFFFFFFFFFFFi64) != 0
&& (*(_BYTE *)(v8 + 34) & 7) == 6
&& (*(_QWORD *)(v8 + 40) & 0xFFFFFFFFFi64) == 0xFFFFFFFFDi64 )
{
if( !v7 )
v6 = (__int64)(v8 - (_QWORD)PfnDb) / 48;
++v7;
}
else
{
if( v7 >= 0x200 )
{
v7 &= 0xFFFFFFFFFFFFFE00ui64;
LODWORD(BitsMustBeChanged) = 1;
MiUpdateLargePageBitMap((UINT64)&Irp, v6, v7, 1ui64, BitsMustBeChanged);
PfnDb = MmGetPfnDb();
}
if( !v7 )
v6 = (__int64)(v8 - (_QWORD)PfnDb) / 48;
v10 = v7 + 512;
v7 = 0i64;
v11 = (v6 + v10) & 0xFFFFFFFFFFFFFE00ui64;
if( !v11 )
goto LABEL_16;
v8 = (unsigned __int64)&PfnDb[v11 - 1];
}
v8 += 48i64;
}
while( v8 < v9 );
if( v7 >= 0x200 )
{
LODWORD(BitsMustBeChanged) = 1;
MiUpdateLargePageBitMap((UINT64)&Irp, v6, v7 & 0xFFFFFFFFFFFFFE00ui64, 1ui64, BitsMustBeChanged);
}
}
}
}
LABEL_16:
PfnDb = MmGetPfnDb();
}
while( NumberOfRuns );
}
}Referenced by:
MiInitNucleus