MiChangeAwePageAttributes
INT64 __fastcall MiChangeAwePageAttributes(INT64 a1, INT64 a2, INT64 a3){
unsigned __int64 v3;
unsigned int v4;
INT64 v6;
unsigned __int64 v7;
INT64 v9;
INT64 v10;
unsigned __int64 v11;
INT64 *v12;
v3 = *(_QWORD *)(a1 + 8);
v4 = a3;
v6 = a2 + 24;
v7 = (unsigned __int8)MiLockPageInline(a2);
if( *(_WORD *)(a2 + 32) > 2u
|| (*(_QWORD *)v6 & 0x3FFFFFFFFFFFFFFFi64) != 1
|| (*(_QWORD *)(a2 + 24) & 0x4000000000000000i64) != 0 )
{
_InterlockedAnd64((volatile signed __int64 *)v6, 0x7FFFFFFFFFFFFFFFui64);
__writecr8(v7);
return 3221225496i64;
}
v9 = *(_QWORD *)(a2 + 16);
_InterlockedAnd64((volatile signed __int64 *)v6, 0x7FFFFFFFFFFFFFFFui64);
__writecr8(v7);
v10 = 0i64;
v11 = 0i64;
if( v3 )
{
while( *(_WORD *)(v6 + 8) <= 2u && (*(_QWORD *)v6 & 0x4000000000000000i64) == 0 )
{
*(_QWORD *)(v6 - 8) = v10;
++v11;
v10 = v6 - 24;
v6 += 48i64;
if( v11 >= v3 )
goto LABEL_10;
}
while( v10 )
{
v12 = (INT64 *)(v10 + 16);
v10 = *(_QWORD *)(v10 + 16);
*v12 = v9;
}
return 3221225496i64;
}
LABEL_10:
MiChangePageAttributeBatch(v10, (_BYTE *)v4, v9);
return 0i64;
}Referenced by:
MiIncrementAweMapCount