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