ExEnableRaiseUMExceptionOnInvalidHandleClose
VOID __stdcall ExEnableRaiseUMExceptionOnInvalidHandleClose(_HANDLE_TABLE *HandleTable, UINT64 Mode){
_ETHREAD *CurrentThread;
int v3;
_EX_PUSH_LOCK *p_HandleTableLock;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v3 = Mode;
--CurrentThread->Tcb.KernelApcDisable;
p_HandleTableLock = &HandleTable->HandleTableLock;
ExAcquirePushLockExclusiveEx(&HandleTable->HandleTableLock, 0i64);
if( v3 )
{
if( v3 == 1 )
LOBYTE(HandleTable->Flags) |= 0x10u;
}
else
{
LOBYTE(HandleTable->Flags) &= ~0x10u;
}
if( (_InterlockedExchangeAdd64(&p_HandleTableLock->_bf_0, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock(p_HandleTableLock);
KeAbPostRelease(p_HandleTableLock);
KeLeaveCriticalRegionThread(&CurrentThread->Tcb);
}Referenced by:
NtSetInformationProcess