KiAbTryIncrementIoWaiterCounts

UINT64 __stdcall KiAbTryIncrementIoWaiterCounts(_KLOCK_ENTRY *Entry, _KLOCK_ENTRY *HeadEntry){
  unsigned __int8 *p_CrossThreadFlags; 
  unsigned __int8 CrossThreadFlags; 
  unsigned int v7; 
  _ETHREAD *v8; 
  _IO_PRIORITY_HINT IoPriorityThread; 

  if( (Entry->ThreadLocalFlags & 1) == 0 )
    return 0i64;
  p_CrossThreadFlags = &Entry->CrossThreadFlags;
  CrossThreadFlags = Entry->CrossThreadFlags;
  if( (CrossThreadFlags & 6) == 6 )
    return 0i64;
  v7 = 0;
  v8 = (_ETHREAD *)((char *)Entry - 16 * Entry->EntryOffset);
  if( (CrossThreadFlags & 2) == 0 )
  {
    IoPriorityThread = PsGetIoPriorityThread(v8);
    if( IoPriorityThread >= IoPriorityNormal )
      goto LABEL_6;
    if( v8->IoBoostCount != v7 )
      IoPriorityThread = IoPriorityNormal;
    if( IoPriorityThread >= IoPriorityNormal )
    {
LABEL_6:
      HeadEntry->BoostBitmap._bf_2 ^= (HeadEntry->BoostBitmap._bf_2 ^ (HeadEntry->BoostBitmap._bf_2 + 2)) & 0x1FE;
      *p_CrossThreadFlags |= 2u;
      if( (HeadEntry->BoostBitmap._bf_2 & 0x1FE) == 2 )
        v7 = 1;
    }
  }
  if( (*p_CrossThreadFlags & 4) == 0 && (!v8->IoQoSThrottleCount || v8->IoQoSBoostCount) )
  {
    HeadEntry->BoostBitmap._bf_2 += 512;
    *p_CrossThreadFlags |= 4u;
    if( (HeadEntry->BoostBitmap._bf_2 & 0xFE00) == 512 )
      v7 |= 2u;
  }
  return v7;
}

Referenced by:

KiAbForceProcessLockEntry
KiAbProcessContextSwitch
KiAbProcessThreadLocks