MiDeleteEnclavePages

VOID __stdcall MiDeleteEnclavePages(_MMVAD_SHORT *Vad){
  INT64 v1; 
  int v2; 
  INT64 v3; 
  _QWORD *v4; 
  INT64 v5; 
  _KTBFLUSH_TYPE v6; 
  NTSTATUS v7; 
  void *v8; 
  _ETHREAD *CurrentThread; 
  _QWORD *v10; 
  __int64 v11; 
  _QWORD *v12; 

  v2 = *(_DWORD *)(v1 + 64);
  v3 = v1;
  if( (v2 & 1) == 0 || *(_QWORD *)(v1 + 120) )
  {
    if( (v2 & 4) != 0 )
    {
      _InterlockedAdd((volatile signed __int32 *)(Vad[26].VadNode.ParentValue + 296), 0xFFFFFFFF);
      v2 = *(_DWORD *)(v1 + 64);
    }
    if( (v2 & 1) != 0 )
    {
      if( (v2 & 8) == 0 )
        MiTerminateHardwareEnclave((INT64)Vad, v1);
      v5 = *(_QWORD *)(v3 + 80);
      if( (MI_READ_PTE_LOCK_FREE(v5) & 1) != 0 )
      {
        v7 = KeRemoveEnclavePage((PVOID)(((v5 << 25) - ((_QWORD)MmGetPteBase() << 25)) >> 16));
        if( v7 < 0 )
          KeBugCheckEx(0x1Au, (PVOID)0x18011544, *(PVOID *)(v3 + 80), (PVOID)v7, 0i64);
        MiDeleteEnclavePage(*(_MMPTE **)(v3 + 80), 0i64);
        v5 = *(_QWORD *)(v3 + 80);
      }
      MiReleasePtes((_MI_SYSTEM_PTE_TYPE *)((char *)&stru_140C4DB30 + 4432), (_MMPTE *)v5, 1ui64, v6);
      v8 = *(void **)(v3 + 88);
      if( v8 )
        ExFreePoolWithTag(v8, 0);
      MiReturnReservedEnclavePages(v3, -1i64);
      CurrentThread = (_ETHREAD *)KeGetCurrentThread();
      --CurrentThread->Tcb.SpecialApcDisable;
      ExAcquirePushLockExclusiveEx((_EX_PUSH_LOCK *)&stru_140C4DB30 + 537, 0i64);
      v10 = (_QWORD *)(v3 + 120);
      v11 = *v10;
      if( *(_QWORD **)(*v10 + 8i64) != v10 || (v12 = (_QWORD *)v10[1], (_QWORD *)*v12 != v10) )
        __fastfail(3u);
      *v12 = v11;
      *(_QWORD *)(v11 + 8) = v12;
      *v10 = 0i64;
      if( (_InterlockedExchangeAdd64((_QWORD *)&stru_140C4DB30 + 537, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
        ExfTryToWakePushLock((_EX_PUSH_LOCK *)&stru_140C4DB30 + 537);
      KeAbPostRelease((char *)&stru_140C4DB30 + 4296);
      KiLeaveGuardedRegionUnsafe((__int64)CurrentThread);
    }
    else
    {
      v4 = *(_QWORD **)(v1 + 72);
      if( v4 )
        PsDeleteVsmEnclave((_EX_PUSH_LOCK *)Vad, v4);
    }
  }
}

Referenced by:

MiDeleteAllHardwareEnclaves
MiDeleteVad