KiAbTryIncrementIoWaiterCounts

UINT64 __stdcall KiAbTryIncrementIoWaiterCounts(_KLOCK_ENTRY *Entry, _KLOCK_ENTRY *HeadEntry){
  unsigned __int8 *p_CrossThreadFlags; 
  unsigned __int8 CrossThreadFlags; 
  unsigned int v7; 
  _DWORD *v8; 
  int IoPriorityThread; 
  if( (Entry->ThreadLocalFlags & 1) == 0 )
    return 0i64;
  p_CrossThreadFlags = &Entry->CrossThreadFlags;
  CrossThreadFlags = Entry->CrossThreadFlags;
  if( (CrossThreadFlags & 6) == 6 )
    return 0i64;
  v7 = 0;
  v8 = (_DWORD *)((char *)Entry - 16 * Entry->EntryOffset);
  if( (CrossThreadFlags & 2) == 0 )
  {
    IoPriorityThread = PsGetIoPriorityThread((__int64)v8);
    if( IoPriorityThread >= 2 )
      goto LABEL_6;
    if( v8[340] != v7 )
      IoPriorityThread = 2;
    if( IoPriorityThread >= 2 )
    {
LABEL_6:
      *((_WORD *)&HeadEntry->BoostBitmap.2 + 1) ^= (*((_WORD *)&HeadEntry->BoostBitmap.2 + 1) ^ (*((_WORD *)&HeadEntry->BoostBitmap.2
                                                                                                 + 1)
                                                                                               + 2)) & 0x1FE;
      *p_CrossThreadFlags |= 2u;
      if( (*((_WORD *)&HeadEntry->BoostBitmap.2 + 1) & 0x1FE) == 2 )
        v7 = 1;
    }
  }
  if( (*p_CrossThreadFlags & 4) == 0 && (!v8[342] || v8[341]) )
  {
    *((_WORD *)&HeadEntry->BoostBitmap.2 + 1) += 512;
    *p_CrossThreadFlags |= 4u;
    if( (*((_WORD *)&HeadEntry->BoostBitmap.2 + 1) & 0xFE00) == 512 )
      v7 |= 2u;
  }
  return v7;
}

Referenced by:

KiAbForceProcessLockEntry
KiAbProcessContextSwitch
KiAbProcessThreadLocks