MiConvertLargePfnToSmall
VOID __stdcall MiConvertLargePfnToSmall(INT64 a1, INT64 a2, INT64 a3, INT64 a4){
char v5;
__int64 v6;
bool v7;
int v8[8];
__int128 v9;
__int128 v10;
unsigned __int64 v11[3];
*(_BYTE *)(a2 + 35) &= 0xF8u;
v5 = *(_BYTE *)(a2 + 34) & 0xEF;
*(_BYTE *)(a2 + 34) = v5;
if( a2 != a1 )
{
*(_BYTE *)(a2 + 34) = v5 ^ (v5 ^ *(_BYTE *)(a1 + 34)) & 7;
*(_QWORD *)(a2 + 16) = *(_QWORD *)(a1 + 16);
}
v6 = *(_QWORD *)(a2 + 40);
*(_BYTE *)(a2 + 39) &= 0xFCu;
v11[0] = 0i64;
v11[1] = v6 & 0xFFFFFFEFFFFFFFFFui64;
v9 = 0i64;
v10 = 0i64;
*(_QWORD *)(a2 + 40) = v6 & 0xFFFFFFEFFFFFFFFFui64;
if( (_DWORD)a4 )
{
*(_QWORD *)(a2 + 24) &= 0xC000000000000000ui64;
v7 = *(_WORD *)(a2 + 32) == 2;
*(_WORD *)(a2 + 32) -= 2;
if( v7 )
{
_InterlockedOr(v8, 0);
MiSetPfnTbFlushStamp((_MMPFN *)a2, (unsigned int)KiTbFlushTimeStamp, 1ui64);
}
}
}Referenced by:
MiConvertEntireLargePageToSmall
MiDemoteValidLargePageOneLevel
MiInitializeMdlLeafPfns