RemoveListHeadPte
_MMPTE *__fastcall RemoveListHeadPte(_MI_PTE_CHAIN_HEAD *PteChainHead){
_MMPTE *PteBase;
__int64 v3;
_MMPTE *v4;
void *v5;
void *v6;
__int64 v7;
__int64 v8;
__int64 v9;
__int64 v10;
__int64 v11;
__int64 v12;
_MMPTE *v13;
__int64 v14;
int v15;
PteBase = PteChainHead->PteBase;
LODWORD(v3) = MiGetPteLink(PteChainHead->Flink.u.Long);
v4 = &PteBase[v3];
LODWORD(v5) = MI_READ_PTE_LOCK_FREE((INT64)v4);
if( ((unsigned __int16)v5 & 0x3E0) != 0i64 || ((unsigned __int8)v5 & 1) != 0 )
KeBugCheckEx(0x1Au, (PVOID)0x3800, v4, v5, 0i64);
LODWORD(v6) = MI_READ_PTE_LOCK_FREE((INT64)&v4[1]);
if( ((unsigned __int16)v6 & 0x3E0) != 0i64 || ((unsigned __int8)v6 & 1) != 0 )
KeBugCheckEx(0x1Au, (PVOID)0x3801, v4, v6, 0i64);
LODWORD(v7) = MiGetPteLink(v4->u.Long);
v8 = MiSwizzleInvalidPte(v7 << 28);
PteChainHead->Flink.u.Long = v8;
v9 = (__int64)((__int64)MmGetPteBase() + (((unsigned __int64)PteChainHead >> 9) & 0x7FFFFFFFF8i64) - (_QWORD)PteBase) >> 3;
if( v10 == v9 )
{
PteChainHead->Blink.u.Long = v8;
}
else
{
v11 = MiSwizzleInvalidPte(v9 << 28);
v13 = &PteBase[v12];
v14 = v11;
LOBYTE(v15) = MiPteInShadowRange((UINT64)&v13[1]);
if( v15 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (v14 & 1) != 0 )
v14 |= 0x8000000000000000ui64;
v13[1].u.Long = v14;
}
return v4;
}Referenced by:
MiObtainSystemCacheView