KiAbDetermineMaxWaiterPriority

VOID __stdcall KiAbDetermineMaxWaiterPriority(_KLOCK_ENTRY *HeadEntry, _AB_PRIORITY *MaxPriority){
  __int16 bf_2; 
  _RTL_BALANCED_NODE *Min; 
  char v4; 

  bf_2 = HeadEntry->BoostBitmap._bf_2;
  MaxPriority->AllPriorities = 0;
  if( (bf_2 & 0x1FE) != 0 )
    MaxPriority->IoPriority = 2;
  if( (bf_2 & 0xFE00) != 0 )
    MaxPriority->IoQoSPriority = 1;
  Min = HeadEntry->WaiterTree.Min;
  if( Min )
    MaxPriority->CpuPriority = (char)Min[2].Children[0];
  if( (HeadEntry->ThreadLocalFlags & 1) != 0 )
  {
    v4 = BYTE3((&HeadEntry[2].FreeListEntry.Next)[-2 * HeadEntry->EntryOffset]);
    if( v4 > 15 )
      v4 = 15;
    if( v4 > MaxPriority->CpuPriority )
      MaxPriority->CpuPriority = v4;
  }
}

Referenced by:

KiAbProcessContextSwitch
KiAbProcessThreadLocks