MiClearSystemAccessBits
VOID __stdcall MiClearSystemAccessBits(INT64 a1, INT64 a2, UINT64 a3){
unsigned int v3;
INT64 v6;
INT64 v7;
signed __int64 v8;
INT64 i;
_MI_TB_FLUSH_LIST TbFlushList[48];
v3 = a3;
memset(TbFlushList, 0i64, 0xB8u);
*(_QWORD *)&TbFlushList[6] = 0i64;
TbFlushList[2] = 20;
v6 = ((a1 << 25) - ((_QWORD)MmGetPteBase() << 25)) >> 16;
if( a2 )
{
v7 = a2;
do
{
LODWORD(v8) = MI_READ_PTE_LOCK_FREE(a1);
if( (v8 & 0x20) != 0 )
_InterlockedCompareExchange64((volatile signed __int64 *)a1, v8 & 0xFFFFFFFFFFFFFFDFui64, v8);
a1 += 8i64;
--v7;
}
while( v7 );
}
if( v3 )
{
for( i = a1 - 8 * a2; a2; --a2 )
{
MiInsertLargeTbFlushEntry(TbFlushList, v3, i);
i += 8i64;
}
}
else
{
MiInsertTbFlushEntry(TbFlushList, (VOID *)v6, a2, 0i64);
}
MiFlushTbList(TbFlushList);
}Referenced by:
MiPfnRangeIsZero