MiClusterVadActive
INT64 __fastcall MiClusterVadActive(_MMVAD *Vad, _MMPFN *Pfn1, UINT64 *PageAlignment){
__int64 v4;
_MMPTE *PteBase;
__int64 v6;
unsigned __int64 v7;
int v8;
__int64 v9;
INT64 v10;
__int64 v11;
UINT64 v12;
__int64 v13;
UINT64 v15;
*PageAlignment = -1i64;
v4 = *((_QWORD *)Pfn1 + 1) << 25;
PteBase = MmGetPteBase();
v6 = (v4 - ((_QWORD)PteBase << 25)) >> 16;
v7 = v6 & 0xFFFFFFFFFFFF0000ui64;
if( (v6 & 0xFFFFFFFFFFFF0000ui64) >> 12 < (*((unsigned int *)Vad + 6) | ((unsigned __int64)*((unsigned __int8 *)Vad
+ 32) << 32))
|| (v7 + 0xFFFF) >> 12 > (*((unsigned int *)Vad + 7) | ((unsigned __int64)*((unsigned __int8 *)Vad + 33) << 32)) )
{
return 0i64;
}
v8 = 0;
v9 = -1i64;
v10 = (INT64)PteBase + ((v7 >> 9) & 0x7FFFFFFFF8i64);
v11 = 0i64;
do
{
v15 = MI_READ_PTE_LOCK_FREE(v10);
v12 = v15;
if( (v15 & 1) != 0 )
{
MiPteInShadowRange((UINT64)&v15);
v13 = (v12 >> 12) & 0xFFFFFFFFFi64;
if( (v13 & 0xF) != (unsigned int)v11 )
return 0i64;
if( v9 == -1 )
{
v9 = v13 - (unsigned int)v11;
}
else
{
if( v13 != v11 + v9 )
return 0i64;
v8 = 1;
}
}
v11 = (unsigned int)(v11 + 1);
v10 += 8i64;
}
while( (unsigned int)v11 < 0x10 );
if( !v8 )
{
*PageAlignment = (unsigned __int16)v6 >> 12;
return 0i64;
}
return 1i64;
}Referenced by:
No references.