MiExpandSystemCache
INT64 __fastcall MiExpandSystemCache(INT16 *a1, UINT64 *a2){
__int64 *v4;
__int64 *v5;
unsigned __int64 v6;
__m128i v7;
__int64 *v8;
__int64 v9;
__m128i v10;
__m128i v11;
__m128i v12;
__int64 v13;
UINT64 v14;
UINT64 v15;
_MMPTE *PteBase;
INT64 v17;
INT64 v19;
*a2 = 0i64;
if( (unsigned __int64)qword_140C4DD88 <= 0x4000000 )
return 0i64;
LODWORD(v4) = MiAllocatePool((struct _SLIST_ENTRY *)0x40);
v5 = v4;
if( !v4 )
return 0i64;
v6 = _mm_srli_si128((__m128i)0i64, 8).m128i_u64[0];
v7 = _mm_cvtsi32_si128(*a1);
v8 = v4 + 9;
v9 = 4i64;
v10 = _mm_slli_epi64(
_mm_and_si128(
_mm_unpacklo_epi32(
_mm_unpacklo_epi16(_mm_shuffle_epi32(_mm_unpacklo_epi16(v7, v7), 0), (__m128i)0i64),
(__m128i)0i64),
(__m128i)_xmm),
6u);
do
{
v11.m128i_i64[0] = *(v8 - 5);
v11.m128i_i64[1] = *v8;
*(v8 - 7) = 0i64;
v12 = _mm_or_si128(_mm_and_si128(v11, (__m128i)_xmm_ffffffffffff003fffffffffffff003f), v10);
*(v8 - 5) = v12.m128i_i64[0];
*v8 = _mm_srli_si128(v12, 8).m128i_u64[0];
*(v8 - 2) = v6;
v8 += 10;
--v9;
}
while( v9 );
v13 = 8i64;
v14 = MiObtainSystemVa(1i64, 8i64);
v15 = v14;
if( !v14 )
{
LABEL_12:
ExFreePoolWithTag(v5, 0);
return 0i64;
}
PteBase = MmGetPteBase();
LODWORD(v19) = 0;
v17 = (INT64)PteBase + ((v14 >> 9) & 0x7FFFFFFFF8i64);
if( !(unsigned int)MiMakeZeroedPageTablesEx(v17, v17 + 4088, 0i64, 8i64, v19) )
{
*a2 = v15;
goto LABEL_12;
}
MiZeroSystemCacheViewCount(((v17 << 25) - ((_QWORD)PteBase << 25)) >> 16);
MiSetSystemCacheReverseMap(v15, (INT64)v5);
do
{
InsertTailListPte((UINT64)(a1 + 892), (UINT64 *)v17);
v17 += 512i64;
--v13;
}
while( v13 );
return v17;
}Referenced by:
MiObtainSystemCacheView