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