MiReplicatePteChangeToProcess
VOID **__fastcall MiReplicatePteChangeToProcess(INT64 a1, UINT64 a2, UINT64 a3){
UINT64 v4;
UINT64 v5;
char *v6;
void *v7;
volatile INT64 *i;
INT64 v9;
INT64 v10;
unsigned __int64 *v12;
unsigned __int64 v13;
v4 = a2;
if( a1 )
{
v5 = *(_QWORD *)(a1 + 40) >> 12;
}
else
{
v12 = (unsigned __int64 *)((char *)MmGetPteBase() + ((a2 >> 9) & 0x7FFFFFFFF8i64));
v13 = *v12;
MiPteInShadowRange((UINT64)v12);
v5 = (v13 >> 12) & 0xFFFFFFFFFi64;
}
LODWORD(v6) = MiMapPageInHyperSpaceWorker(v5, 0i64, 0x80000000ui64);
v7 = v6;
for( i = (volatile INT64 *)&v6[8 * ((v4 >> 3) & 0x1FF)]; v4 <= a3; ++i )
{
v9 = MI_READ_PTE_LOCK_FREE(v4);
v10 = MI_READ_PTE_LOCK_FREE((INT64)i);
if( v9 != v10 )
{
if( (v9 & 1) != 0 && (v10 & 1) != 0 )
MiTransformValidPteInPlace(i, v4, v9, 3ui64);
else
*i = v9;
}
v4 += 8i64;
}
MiUnmapPageInHyperSpaceWorker(v7, 0x11u, 0x80000000ui64);
return MiShadowTopLevelPxes();
}Referenced by:
MiReplicatePteChange