InsertTailListPte
char __fastcall InsertTailListPte(unsigned __int64 a1, unsigned __int64 *a2){
_MMPTE *PteBase;
unsigned __int64 v5;
__int64 v6;
unsigned __int64 v7;
UINT64 v8;
int v9;
__int64 v10;
__int64 v11;
__int64 v12;
int v13;
__int64 v14;
__int64 v15;
_ETHREAD *CurrentThread;
__int64 v17;
unsigned __int64 *v18;
_ETHREAD *v19;
unsigned __int64 v20;
PteBase = MmGetPteBase();
v5 = (a1 >> 9) & 0x7FFFFFFFF8i64;
v6 = MiSwizzleInvalidPte((__int64)((__int64)PteBase + v5 - *(_QWORD *)(a1 + 16)) >> 3 << 28);
v7 = v6;
LOBYTE(v9) = MiPteInShadowRange(v8);
if( v9 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (v6 & 1) != 0 )
v7 = v6 | 0x8000000000000000ui64;
*a2 = v7;
LODWORD(v10) = MiGetPteLink(*(_QWORD *)(a1 + 8));
v11 = v10;
if( *(&stru_140C4DB30 + 42) )
{
if( (v6 & 0x10) != 0 )
LODWORD(v6) = v6 & 0xFFFFFFEF;
else
LODWORD(v6) = ~*(&stru_140C4DB30 + 84) & v6;
}
v12 = MiSwizzleInvalidPte(v6 & 0xFFFFFFF | (v10 << 28));
LOBYTE(v13) = MiPteInShadowRange((UINT64)(a2 + 1));
if( v13 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (v12 & 1) != 0 )
v12 |= 0x8000000000000000ui64;
a2[1] = v12;
v14 = *(_QWORD *)(a1 + 16);
v15 = (__int64)((__int64)PteBase + v5 - v14) >> 3;
CurrentThread = (_ETHREAD *)MiSwizzleInvalidPte(((__int64)a2 - v14) >> 3 << 28);
if( v11 == v15 )
{
*(_QWORD *)a1 = CurrentThread;
*(_QWORD *)(a1 + 8) = CurrentThread;
}
else
{
v18 = (unsigned __int64 *)(v17 + 8 * v11);
v19 = CurrentThread;
v20 = (unsigned __int64)CurrentThread;
LOBYTE(CurrentThread) = MiPteInShadowRange((UINT64)v18);
if( (_DWORD)CurrentThread )
{
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
if( (CurrentThread->Tcb.ApcState.Process->Flags3 & 0x1000) != 0 && ((unsigned __int8)v19 & 1) != 0 )
v20 |= 0x8000000000000000ui64;
}
*v18 = v20;
*(_QWORD *)(a1 + 8) = v19;
}
return(char)CurrentThread;
}Referenced by:
MiExpandSystemCache
MiReleaseSystemCacheView