MiUpdateAwePageTable

INT64 __fastcall MiUpdateAwePageTable(UINT64 a1, INT64 a2, INT64 a3){
  int v3; 
  __int64 v6; 
  unsigned int v7; 
  __int64 v8; 
  unsigned __int64 v9; 
  char *v10; 
  _MMPFN *UsedPtesHandle; 
  UINT64 SpinCount; 
  v3 = a3;
  v6 = (_QWORD)MmGetPteBase() << 25;
  v7 = 0;
  v8 = (((__int64)((a1 << 25) - v6) >> 16 << 25) - v6) >> 16;
  if( a2 )
  {
    v9 = *(_QWORD *)a1;
    MiPteInShadowRange(a1);
    v10 = (char *)MmGetPfnDb() + 48 * ((v9 >> 12) & 0xFFFFFFFFFi64);
    LODWORD(SpinCount) = 0;
    while( _interlockedbittestandset64((volatile signed __int32 *)v10 + 6, 0x3Fui64) )
    {
      do
        KeYieldProcessorEx(&SpinCount);
      while( *((__int64 *)v10 + 3) < 0 );
    }
    *((_QWORD *)v10 + 3) ^= (*((_QWORD *)v10 + 3) ^ (*((_QWORD *)v10 + 3) + a2)) & 0x3FFFFFFFFFFFFFFFi64;
    _InterlockedAnd64((volatile signed __int64 *)v10 + 3, 0x7FFFFFFFFFFFFFFFui64);
  }
  if( (_MMPTE *)a1 == MmGetPxeSelfRef() || !v3 )
    return 0i64;
  UsedPtesHandle = MiGetUsedPtesHandle(v8);
  if( v3 <= 0 )
  {
    if( !(unsigned int)MiDecreaseUsedPtesCount(UsedPtesHandle, (unsigned int)-v3) )
      return 1;
  }
  else
  {
    MiIncreaseUsedPtesCount(UsedPtesHandle, (unsigned int)v3);
  }
  return v7;
}

Referenced by:

MiDeleteEnclavePage
MiFreePhysicalPages
MiWriteAwePtes
MiWriteEnclavePte