RemoveListEntryPte
char __fastcall RemoveListEntryPte(UINT64 *a1, UINT64 *a2){
__int64 v4;
UINT64 v5;
UINT64 *v6;
UINT64 v7;
int v8;
__int64 v9;
UINT64 v10;
UINT64 v11;
int v12;
_ETHREAD *CurrentThread;
bool v14;
LODWORD(v4) = MiGetPteLink(a2[1]);
v5 = a1[2];
v6 = a1;
if( v4 != (__int64)((__int64)MmGetPteBase() + (((unsigned __int64)a1 >> 9) & 0x7FFFFFFFF8i64) - v5) >> 3 )
v6 = (UINT64 *)(v5 + 8 * v4);
v7 = *a2;
LOBYTE(v8) = MiPteInShadowRange((UINT64)v6);
if( v8 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (v7 & 1) != 0 )
v7 |= 0x8000000000000000ui64;
*v6 = v7;
LODWORD(v9) = MiGetPteLink(*a2);
v10 = a1[2];
if( v9 != (__int64)((__int64)MmGetPteBase() + (((unsigned __int64)a1 >> 9) & 0x7FFFFFFFF8i64) - v10) >> 3 )
a1 = (UINT64 *)(v10 + 8 * v9);
v11 = a2[1];
v12 = 0;
LOBYTE(CurrentThread) = MiPteInShadowRange((UINT64)(a1 + 1));
if( (_DWORD)CurrentThread )
{
LODWORD(CurrentThread) = MiPteHasShadow();
if( (_DWORD)CurrentThread )
{
v12 = 1;
if( *(&stru_140C4DB30 + 537) )
goto LABEL_7;
v14 = (v11 & 1) == 0;
}
else
{
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
if( (CurrentThread->Tcb.ApcState.Process->Flags3 & 0x1000) == 0 )
goto LABEL_7;
v14 = (v11 & 1) == 0;
}
if( !v14 )
v11 |= 0x8000000000000000ui64;
}
LABEL_7:
a1[1] = v11;
if( v12 )
LOBYTE(CurrentThread) = MiWritePteShadow();
return(char)CurrentThread;
}Referenced by:
MiReleaseSystemCacheView