MiFreedUnusedPfnPagesWorker
VOID __stdcall MiFreedUnusedPfnPagesWorker(UINT64 *rcx0){
unsigned __int64 v1;
_MMPTE *PteBase;
_MMPFN *PfnDb;
unsigned __int64 v4;
unsigned __int64 v5;
UINT64 v6;
UINT64 v7;
_MMPFN *v8;
_MMPFN *v9;
UINT64 v10;
_MMPFN *v11;
__int64 v12;
unsigned __int64 v13;
unsigned __int64 v14;
_MMPFN *v15;
__int64 v16;
_MMPFN *v17;
__int64 v18;
_MMPFN *v19;
_MMPFN *v20;
__int64 v21;
_PHYSICAL_MEMORY_RUN *i;
unsigned __int64 BasePage;
unsigned __int64 v24;
UINT64 v25;
UINT64 v26;
UINT64 v27;
unsigned __int64 v28;
if( !*rcx0 )
*(&stru_140C50B28 + 100) = 1;
v1 = 0i64;
LABEL_4:
PteBase = MmGetPteBase();
LABEL_5:
PfnDb = MmGetPfnDb();
LABEL_6:
if( v1 != 0x1000000000i64 )
{
if( !MmPhysicalMemoryBlock )
{
LABEL_8:
v4 = 0x1000000000i64 - v1;
goto LABEL_9;
}
for( i = MmPhysicalMemoryBlock->Run; ; ++i )
{
if( i >= &MmPhysicalMemoryBlock->Run[MmPhysicalMemoryBlock->NumberOfRuns] )
{
PfnDb = MmGetPfnDb();
goto LABEL_8;
}
BasePage = i->BasePage;
if( v1 >= i->BasePage )
{
v24 = i->PageCount + BasePage;
if( v1 < v24 )
v1 = v24;
}
else
{
v4 = BasePage - v1;
if( BasePage - v1 >= 0x55 )
{
PfnDb = MmGetPfnDb();
LABEL_9:
v5 = v1;
if( v4 )
{
v1 += v4;
v28 = v1;
v6 = (UINT64)PteBase + (((48 * v5 - 0x57FFFFFF001i64) >> 9) & 0x7FFFFFFFF8i64);
v26 = v6;
v7 = (UINT64)PteBase + (((unsigned __int64)&PfnDb[v1] >> 9) & 0x7FFFFFFFF8i64);
v27 = v7;
if( v6 < v7 )
{
while( 1 )
{
v25 = (__int64)(v7 - v6) >> 3 << 12;
LODWORD(v8) = MiGetNextNonGapPfnPage(&v26, &v25, 2, 1i64);
PteBase = MmGetPteBase();
v9 = v8;
if( !v8 )
goto LABEL_5;
v10 = v25 & 0xFFFFFFFFFFFFF000ui64;
if( (v25 & 0xFFFFFFFFFFFFF000ui64) == 0 )
goto LABEL_5;
v11 = MmGetPfnDb();
do
{
if( v9->u1.$976DF529DAC3D73085C9E386D94B91E6::$E228DCF3D8940E384DBC5EFCA756D8B6::_bf_0
|| (LODWORD(v14) = RtlCompareMemoryUlong(v9, v10, 0i64), v12 = v14, v14 < 0x1000) )
{
v12 = 4096i64;
}
else
{
v15 = v9;
v16 = v9 - v11;
v17 = &v11[v16];
if( v17 != v9 )
{
if( !MmIsAddressValidEx((INT64)&v11[v16])
|| (LODWORD(v18) = RtlCompareMemoryUlong(v17, 48, 0i64), v18 != 48) )
{
v15 = (_MMPFN *)((char *)v9 + 4096);
}
}
v19 = (_MMPFN *)((char *)v9 + (v12 & 0xFFFFFFFFFFFFF000ui64));
v20 = &v11[v19 - v11];
if( v20 != v19 )
{
if( !MmIsAddressValidEx((INT64)&v20[1])
|| (LODWORD(v21) = RtlCompareMemoryUlong(v20, 48, 0i64), v21 != 48) )
{
v19 = (_MMPFN *)((char *)v19 - 4096);
}
}
MiPfnRangeIsZero(v15, v19);
}
v13 = (v12 + 4095) & 0xFFFFFFFFFFFFF000ui64;
v9 = (_MMPFN *)((char *)v9 + v13);
v10 -= v13;
}
while( v10 >= 0x1000 );
v6 = v26;
v7 = v27;
v1 = v28;
if( v26 >= v27 )
goto LABEL_4;
}
}
goto LABEL_6;
}
return;
}
v1 = BasePage + i->PageCount;
}
}
}
}Referenced by:
MiFreeUnusedPfnPagesDpc