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