InsertTailListPte
CHAR __fastcall InsertTailListPte(UINT64 a1, UINT64 *a2){
_MMPTE *PteBase;
UINT64 v5;
INT64 v6;
UINT64 PteLink;
UINT64 v8;
__int64 v9;
__int64 v10;
_ETHREAD *CurrentThread;
__int64 v12;
unsigned __int64 *v13;
_ETHREAD *v14;
unsigned __int64 v15;
PteBase = MmGetPteBase();
v5 = (a1 >> 9) & 0x7FFFFFFFF8i64;
v6 = MiSwizzleInvalidPte((__int64)((__int64)PteBase + v5 - *(_QWORD *)(a1 + 16)) >> 3 << 28);
*a2 = v6;
PteLink = MiGetPteLink(*(_QWORD *)(a1 + 8));
v8 = PteLink;
if( qword_140C4DC80 )
{
if( (v6 & 0x10) != 0 )
LODWORD(v6) = v6 & 0xFFFFFFEF;
else
LODWORD(v6) = ~(_DWORD)qword_140C4DC80 & v6;
}
a2[1] = MiSwizzleInvalidPte(v6 & 0xFFFFFFF | (PteLink << 28));
v9 = *(_QWORD *)(a1 + 16);
v10 = (__int64)((__int64)PteBase + v5 - v9) >> 3;
CurrentThread = (_ETHREAD *)MiSwizzleInvalidPte(((__int64)a2 - v9) >> 3 << 28);
if( v8 == v10 )
{
*(_QWORD *)a1 = CurrentThread;
*(_QWORD *)(a1 + 8) = CurrentThread;
}
else
{
v13 = (unsigned __int64 *)(v12 + 8 * v8);
v14 = CurrentThread;
v15 = (unsigned __int64)CurrentThread;
LODWORD(CurrentThread) = MiPteInShadowRange((UINT64)v13);
if( (_DWORD)CurrentThread )
{
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
if( (*(_DWORD *)(*((_QWORD *)CurrentThread + 23) + 2172i64) & 0x1000) != 0 && ((unsigned __int8)v14 & 1) != 0 )
v15 |= 0x8000000000000000ui64;
}
*v13 = v15;
*(_QWORD *)(a1 + 8) = v14;
}
return(char)CurrentThread;
}Referenced by:
MiExpandSystemCache
MiReleaseSystemCacheView