MiWriteEnclavePte

NTSTATUS __fastcall MiWriteEnclavePte(UINT64 a1, INT64 a2, INT64 a3, INT64 a4, INT64 a5){
  int v5; 
  _MMSUPPORT_FULL *p_Vm; 
  char *v10; 
  UINT8 v11; 
  char v12; 
  NTSTATUS result; 
  __int64 v14; 
  __int64 v15; 
  int v16; 
  INT64 v17; 
  INT64 v18; 
  UINT64 v19; 
  UINT64 v20; 

  v5 = a4;
  p_Vm = &KeGetCurrentThread()->ApcState.Process->Vm;
  v10 = (char *)MmGetPteBase() + ((a1 >> 9) & 0x7FFFFFFFF8i64);
  if( (_DWORD)a5 )
  {
    MiLockWorkingSetShared();
    LODWORD(v20) = 0;
    v12 = v11;
    MiMakeSystemAddressValid((VOID *)a1, 0i64, (*(_DWORD *)(a3 + 48) >> 12) & 0x3F, v11, v20);
  }
  else
  {
    v12 = 17;
  }
  if( v5 )
  {
    LOBYTE(result) = MiWriteValidPteNewProtection((INT64 *)a1, a2);
  }
  else
  {
    LODWORD(v14) = MI_READ_PTE_LOCK_FREE(a1);
    v15 = v14;
    LOBYTE(v16) = MiPteInShadowRange(a1);
    v17 = 1i64;
    if( v16 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (a2 & 1) != 0 )
      a2 |= 0x8000000000000000ui64;
    *(_QWORD *)a1 = a2;
    v18 = 0i64;
    if( v15 )
    {
      if( (v15 & 0xC00) == 2048 )
        v17 = 0i64;
    }
    else
    {
      v18 = 1i64;
    }
    result = v17 | v18;
    if( v17 | (unsigned int)v18 )
      result = MiUpdateAwePageTable((UINT64)v10, v17, v18);
  }
  if( (_DWORD)a5 )
  {
    MiUnlockPageTableInternal((INT64)p_Vm, (UINT64)v10);
    LOBYTE(v19) = v12;
    MiUnlockWorkingSetShared(&p_Vm->Instance, v19);
  }
  return result;
}

Referenced by:

MiAddPagesToEnclave
MiCopyPagesIntoEnclave
MiProtectEnclavePages