ExEnableHandleExceptions

UINT8 __fastcall ExEnableHandleExceptions(_HANDLE_TABLE *HandleTable, UINT8 Enable){
  _ETHREAD *CurrentThread; 
  _EX_PUSH_LOCK *p_HandleTableLock; 
  _HANDLE_TRACE_DEBUG_INFO *DebugInfo; 
  __int64 Flags_low; 
  bool v8; 
  unsigned int BitMaskFlags; 
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --*((_WORD *)CurrentThread + 242);
  p_HandleTableLock = &HandleTable->HandleTableLock;
  ExAcquirePushLockExclusiveEx((UINT64)&HandleTable->HandleTableLock, 0i64);
  DebugInfo = HandleTable->DebugInfo;
  if( DebugInfo )
  {
    BitMaskFlags = DebugInfo->BitMaskFlags;
    if( (BitMaskFlags & 8) == 0 )
    {
      if( Enable )
        DebugInfo->BitMaskFlags = BitMaskFlags | 8;
      goto LABEL_4;
    }
  }
  else
  {
    Flags_low = LOBYTE(HandleTable->Flags);
    if( (Flags_low & 2) == 0 )
    {
      HandleTable->1 = ($674F156C788F89EBCBFDC1492D6BA90B)(Flags_low & 0xFD | (Enable != 0 ? 2 : 0));
LABEL_4:
      v8 = 1;
      goto LABEL_5;
    }
  }
  v8 = Enable != 0;
LABEL_5:
  if( (_InterlockedExchangeAdd64((volatile signed __int64 *)p_HandleTableLock, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
    ExfTryToWakePushLock((volatile INT64 *)p_HandleTableLock);
  KeAbPostRelease(p_HandleTableLock);
  KeLeaveCriticalRegionThread((__int64)CurrentThread);
  return v8;
}

Referenced by:

NtSetInformationProcess
PspApplyMitigationOptions