MiInitializeAllResidentPageBasePfns
CHAR __stdcall MiInitializeAllResidentPageBasePfns(
UINT16 *a1,
INT64 a2,
INT64 a3,
INT64 a4,
CHAR a5,
INT64 a6,
INT64 a7){
__int64 v7;
unsigned __int64 v9;
__int64 v10;
_LIST_ENTRY v11;
_MMPFN *v12;
_MMPFN *i;
char v14;
char v15;
_MMPFN *v16;
__m128i v17;
__int64 v18;
_MMPFN *v19;
__m128i v20;
INT64 v22[2];
__m128i v23;
v7 = *a1;
v23 = *((__m128i *)&stru_140C4DB30 + 126);
v9 = _mm_srli_si128(*(&stru_140C4DB30 + 126), 8).m128i_u64[0];
v10 = MiLargePageSizes[(unsigned int)a4];
v11 = (_LIST_ENTRY)*(&stru_140C4DB30 + 124);
v23.m128i_i64[1] = (v9 ^ (v7 << 39)) & 0x1FF8000000000i64 ^ v9;
v23.m128i_i8[7] = (*(&stru_140C4DB30 + 2023) ^ ~(_BYTE)a4) & 3 ^ *(&stru_140C4DB30 + 2023);
*(_OWORD *)v22 = *(&stru_140C4DB30 + 125);
v12 = &MmGetPfnDb()[a2];
if( (_DWORD)a7 )
v22[1] |= 0x8000000000000000ui64;
LOBYTE(i) = a5 << 6;
v14 = (a5 << 6) | v23.m128i_i8[2] & 0x3F;
v15 = (a5 << 6) | v23.m128i_i8[2] & 0x38 | 5;
if( !(_DWORD)a6 )
{
LODWORD(i) = MiUpdatePageFileHighInPte(v22[0], 4294967293i64);
v22[0] = (INT64)i;
}
v16 = &v12[a3];
v23.m128i_i8[2] = v15 ^ (v15 ^ v14) & 7;
if( v12 < v16 )
{
v17 = _mm_loadu_si128(&v23);
v18 = 48 * v10;
v19 = v12 + 1;
do
{
for( i = v12; i != v19; ++i )
{
v20 = _mm_loadu_si128((const __m128i *)v22);
i->ListEntry = v11;
*((__m128i *)&i->3 + 1) = v20;
*(__m128i *)&i->u3.ReferenceCount = v17;
}
v12 = (_MMPFN *)((char *)v12 + v18);
v19 = (_MMPFN *)((char *)v19 + v18);
}
while( v12 < v16 );
}
return(char)i;
}Referenced by:
MiCoalesceFreePages
MiDeleteClusterSection
MiInitializeDynamicPfns
MxCreateFreePfns