PsIsVsmEnclaveTerminated

BOOL __stdcall PsIsVsmEnclaveTerminated(INT64 a1){
  _ETHREAD *CurrentThread; 
  _EX_PUSH_LOCK *v3; 
  int v4; 
  bool v5; 

  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --CurrentThread->Tcb.KernelApcDisable;
  v3 = (_EX_PUSH_LOCK *)(a1 + 48);
  ExAcquirePushLockExclusiveEx((_EX_PUSH_LOCK *)(a1 + 48), 0i64);
  v4 = *(_DWORD *)(a1 + 44);
  if( !v4 )
  {
    *(_DWORD *)(a1 + 44) = 2;
    KeSetEvent((PRKEVENT)(a1 + 80), 0, 0);
    v4 = *(_DWORD *)(a1 + 44);
  }
  v5 = v4 == 2;
  if( (_InterlockedExchangeAdd64(&v3->_bf_0, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
    ExfTryToWakePushLock(v3);
  KeAbPostRelease(v3);
  KeLeaveCriticalRegion();
  return v5;
}

Referenced by:

MiCanDeleteEnclave