KiAbIoBoostOwners

VOID __stdcall KiAbIoBoostOwners(
        _KLOCK_ENTRY *HeadEntry,
        UINT64 BoostFlags,
        _SINGLE_LIST_ENTRY *ReadyList,
        _SINGLE_LIST_ENTRY *PropagateBoostsList,
        _SINGLE_LIST_ENTRY *SelfBoostsList){
  char v6; 
  _SINGLE_LIST_ENTRY *v7; 
  _QWORD *Children; 
  char v11; 
  _QWORD **v12; 
  _QWORD *v13; 
  _QWORD *v14; 
  int v15; 
  int v16; 
  v16 = 0;
  v15 = 0;
  v6 = 0;
  v7 = SelfBoostsList;
  Children = HeadEntry->OwnerTree.Min->Children;
  if( (BoostFlags & 1) != 0 )
    v6 = 2;
  BYTE1(v16) = v6;
  v11 = BYTE2(v16);
  if( (BoostFlags & 2) != 0 )
    v11 = 1;
  BYTE2(v16) = v11;
  while( Children )
  {
    KiAbSetMinimumThreadPriority((__int64)Children, (__int64)&v16, (__int64)ReadyList, PropagateBoostsList, v7, &v15);
    v12 = (_QWORD **)Children[1];
    v13 = Children;
    if( v12 )
    {
      v14 = *v12;
      for( Children = (_QWORD *)Children[1]; v14; v14 = (_QWORD *)*v14 )
        Children = v14;
    }
    else
    {
      while( 1 )
      {
        Children = (_QWORD *)(Children[2] & 0xFFFFFFFFFFFFFFFCui64);
        if( !Children || (_QWORD *)*Children == v13 )
          break;
        v13 = Children;
      }
    }
  }
  if( (HeadEntry->ThreadLocalFlags & 1) == 0 )
    KiAbSetMinimumThreadPriority((__int64)HeadEntry, (__int64)&v16, (__int64)ReadyList, PropagateBoostsList, v7, &v15);
}

Referenced by:

KiAbForceProcessLockEntry
KiAbProcessContextSwitch
KiAbProcessThreadLocks