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