MiSlowRotateCopy
void __fastcall MiSlowRotateCopy(__int64 a1, __int64 a2, __int64 a3){
UINT64 *v3;
unsigned __int64 v4;
int v5;
_MEMORY_CACHING_TYPE v6;
__int64 v7;
__int64 v8;
_MMPTE *v9;
_MMPTE *v10;
INT64 v11[2];
_MMPTE *MappingPte;
v3 = (UINT64 *)(a2 + 48);
v4 = (unsigned __int64)*(unsigned int *)(a2 + 40) >> 12;
*(_OWORD *)v11 = 0i64;
MappingPte = 0i64;
v5 = *(_DWORD *)(a3 + 48);
if( (v5 & 0x380) != 0 && (v5 & 0xC00) == 3072 )
v6 = MmWriteCombined;
else
v6 = (v5 & 0xC00) != 1024;
if( v4 )
{
v7 = (_QWORD)MmGetPteBase() << 25;
v8 = a1 - (_QWORD)v3;
do
{
MiGetPteMappingPair(1i64, (INT64)v11);
v9 = MappingPte;
v10 = (_MMPTE *)((char *)MappingPte + 8);
MiInitializeSlowPte(MappingPte, *v3, v6);
MiInitializeSlowPte(v10, *(UINT64 *)((char *)v3 + v8 + 48), v6);
KeCopyPage((PVOID)((((_QWORD)v10 << 25) - v7) >> 16));
*(_QWORD *)v9 = ZeroPte;
*(_QWORD *)v10 = ZeroPte;
MiReturnPteMappingPair((INT64)v11);
++v3;
--v4;
}
while( v4 );
}
}Referenced by:
MmRotatePhysicalView