MiGetBaseResidentPage
_MMPFN *__fastcall MiGetBaseResidentPage(_MMPFN *a1){
_MMPFN *PfnDb;
_MMPFN *v2;
__int64 v3;
int v4;
unsigned __int64 v5;
int i;
__int64 v7;
unsigned int v8;
__int128 *v9;
_MMPFN *v10;
__int128 v12;
__int64 v13;
PfnDb = MmGetPfnDb();
v2 = a1;
v12 = 0i64;
v13 = 0i64;
v3 = a1 - PfnDb;
v4 = 0;
v5 = v3;
for( i = 2; ; --i )
{
v7 = MiLargePageSizes[i] - 1;
if( (v7 & v5) != 0 )
{
v5 &= ~v7;
v2 = &PfnDb[v5];
if( (unsigned int)++v4 > 3 )
KeBugCheckEx(0x1Au, (PVOID)0x9700, (PVOID)v3, (PVOID)v5, 0i64);
*((_QWORD *)&v12 + (unsigned int)(v4 - 1)) = v2;
MiLockNestedPageAtDpcInline(&PfnDb[v5]);
}
if( (v2->ViewCount & 3) != 0 )
break;
if( !i )
KeBugCheckEx(0x1Au, (PVOID)0x9701, (PVOID)v3, (PVOID)v5, 0i64);
}
v8 = 0;
v9 = &v12;
do
{
v10 = *(_MMPFN **)v9;
if( !*(_QWORD *)v9 )
break;
if( v10 != v2 )
_InterlockedAnd64(&v10->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
++v8;
v9 = (__int128 *)((char *)v9 + 8);
}
while( v8 < 3 );
return v2;
}Referenced by:
MiActivePageClaimCandidate
MiGetPfnPageSizeIndexUnsynchronized
MiIdentifyPfn
MiTradePage
MiTransferPartitionPageRun
MmUnlockPages