MiExpandSystemCache
_MMPTE *__stdcall MiExpandSystemCache(_KTHREAD **a1, UINT64 *a2){
__int64 *Pool;
unsigned __int64 v5;
__m128i v6;
__int64 *v7;
__int64 v8;
__m128i v9;
__m128i v10;
__m128i v11;
__int64 v12;
UINT64 v13;
UINT64 v14;
_MMPTE *PteBase;
INT64 v16;
INT64 v18;
*a2 = 0i64;
if( *(&stru_140C4DB30 + 75) <= 0x4000000ui64 )
return 0i64;
Pool = (__int64 *)MiAllocatePool(64i64, 0x140ui64, 0x6353694Dui64);
if( !Pool )
return 0i64;
v5 = _mm_srli_si128((__m128i)0i64, 8).m128i_u64[0];
v6 = _mm_cvtsi32_si128(*(__int16 *)a1);
v7 = Pool + 9;
v8 = 4i64;
v9 = _mm_slli_epi64(
_mm_and_si128(
_mm_unpacklo_epi32(
_mm_unpacklo_epi16(_mm_shuffle_epi32(_mm_unpacklo_epi16(v6, v6), 0), (__m128i)0i64),
(__m128i)0i64),
(__m128i)_xmm),
6u);
do
{
v10.m128i_i64[0] = *(v7 - 5);
v10.m128i_i64[1] = *v7;
*(v7 - 7) = 0i64;
v11 = _mm_or_si128(_mm_and_si128(v10, (__m128i)_xmm_ffffffffffff003fffffffffffff003f), v9);
*(v7 - 5) = v11.m128i_i64[0];
*v7 = _mm_srli_si128(v11, 8).m128i_u64[0];
*(v7 - 2) = v5;
v7 += 10;
--v8;
}
while( v8 );
v12 = 8i64;
v13 = (UINT64)MiObtainSystemVa(1ui64, MiVaSystemCache);
v14 = v13;
if( !v13 )
{
LABEL_12:
ExFreePoolWithTag(Pool, 0);
return 0i64;
}
PteBase = MmGetPteBase();
LODWORD(v18) = 0;
v16 = (INT64)PteBase + ((v13 >> 9) & 0x7FFFFFFFF8i64);
if( !MiMakeZeroedPageTablesEx(v16, v16 + 4088, 0i64, 8i64, v18) )
{
*a2 = v14;
goto LABEL_12;
}
MiZeroSystemCacheViewCount(((v16 << 25) - ((_QWORD)PteBase << 25)) >> 16);
MiSetSystemCacheReverseMap(v14, (__int64)Pool);
do
{
InsertTailListPte((unsigned __int64)(a1 + 223), (unsigned __int64 *)v16);
v16 += 512i64;
--v12;
}
while( v12 );
return(_MMPTE *)v16;
}Referenced by:
MiObtainSystemCacheView