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