MiCreateInitialLargeLeafPfns
CHAR __fastcall MiCreateInitialLargeLeafPfns(INT64 a1, INT64 a2, INT64 a3, CHAR a4, UINT16 a5, INT64 a6){
__m128i v6;
INT64 v8;
__m128i v9;
unsigned __int64 v10;
__int64 v11;
__m128i *v12;
CHAR result;
__int64 v14;
__m128i v15;
INT64 v16;
__m128i *v17;
__int128 v18;
__m128i v19;
v6 = *(__m128i *)&xmmword_140C4E2C0;
v8 = a1;
v9 = (__m128i)xmmword_140C4E2D0;
v19 = (__m128i)xmmword_140C4E2E0;
v10 = _mm_srli_si128((__m128i)xmmword_140C4E2E0, 8).m128i_u64[0];
v11 = MiLargePageSizes[(unsigned int)a3];
v19.m128i_i64[1] = (v10 ^ ((unsigned __int64)a5 << 39)) & 0x1FF8000000000i64 ^ v10;
v18 = xmmword_140C4E2D0;
v12 = (__m128i *)((char *)MmGetPfnDb() + 48 * a1);
if( (_DWORD)a6 )
{
*((_QWORD *)&v18 + 1) |= 0x8000000000000000ui64;
v9 = _mm_loadu_si128((const __m128i *)&v18);
}
result = v19.m128i_i8[2] & 0x3F;
v19.m128i_i8[2] = v19.m128i_i8[2] & 0x3F | (a4 << 6);
v14 = v11 - 1;
v15 = _mm_loadu_si128(&v19);
do
{
if( (v14 & v8) == 0 )
{
if( !--a2 )
return result;
v12 += 3;
++v8;
}
if( ((v8 ^ (v8 + a2 - 1)) & ~(v11 - 1)) != 0 )
v16 = v11 - (v8 & v14);
else
v16 = a2;
result = 48 * v16;
v17 = &v12[3 * v16];
if( (unsigned __int64)(48 * v16) <= 0x1000 )
{
while( v12 != v17 )
{
*v12 = v6;
v12[1] = v9;
v12[2] = v15;
v12 += 3;
}
}
else
{
while( v12 != v17 )
{
_mm_stream_si128(v12, v6);
_mm_stream_si128(v12 + 1, v9);
_mm_stream_si128(v12 + 2, v15);
v12 += 3;
}
_mm_sfence();
}
v8 += v16;
v12 = v17;
a2 -= v16;
}
while( a2 );
return result;
}Referenced by:
MiCoalesceFreePages
MiDeleteClusterSection
MiInitializeUnusablePfns
MxCreateFreePfns