MiInitializeAllResidentPageBasePfns
CHAR __fastcall MiInitializeAllResidentPageBasePfns(
UINT16 *rcx0,
INT64 a2,
INT64 a3,
INT64 a4,
CHAR a5,
INT64 a6,
INT64 a7){
__int64 v7;
unsigned __int64 v9;
__int64 v10;
__int128 v11;
char *v12;
char *updated;
char v14;
char v15;
char *v16;
__m128i v17;
__int64 v18;
char *v19;
__m128i v20;
INT64 a1[2];
__int128 v23;
v7 = *rcx0;
v23 = xmmword_140C4E310;
v9 = _mm_srli_si128((__m128i)xmmword_140C4E310, 8).m128i_u64[0];
v10 = MiLargePageSizes[(unsigned int)a4];
v11 = *(_OWORD *)&xmmword_140C4E2F0;
*((_QWORD *)&v23 + 1) = (v9 ^ (v7 << 39)) & 0x1FF8000000000i64 ^ v9;
BYTE7(v23) = (BYTE7(xmmword_140C4E310) ^ ~(_BYTE)a4) & 3 ^ BYTE7(xmmword_140C4E310);
*(_OWORD *)a1 = xmmword_140C4E300;
v12 = (char *)MmGetPfnDb() + 48 * a2;
if( (_DWORD)a7 )
a1[1] |= 0x8000000000000000ui64;
LOBYTE(updated) = a5 << 6;
v14 = (a5 << 6) | BYTE2(v23) & 0x3F;
v15 = (a5 << 6) | BYTE2(v23) & 0x38 | 5;
if( !(_DWORD)a6 )
{
updated = (char *)MiUpdatePageFileHighInPte(a1[0], 4294967293i64);
a1[0] = (INT64)updated;
}
v16 = &v12[48 * a3];
BYTE2(v23) = v15 ^ (v15 ^ v14) & 7;
if( v12 < v16 )
{
v17 = _mm_loadu_si128((const __m128i *)&v23);
v18 = 48 * v10;
v19 = v12 + 48;
do
{
for( updated = v12; updated != v19; updated += 48 )
{
v20 = _mm_loadu_si128((const __m128i *)a1);
*(_OWORD *)updated = v11;
*((__m128i *)updated + 1) = v20;
*((__m128i *)updated + 2) = v17;
}
v12 += v18;
v19 += v18;
}
while( v12 < v16 );
}
return(char)updated;
}Referenced by:
MiCoalesceFreePages
MiDeleteClusterSection
MiInitializeDynamicPfns
MxCreateFreePfns