KiAbIoBoostOwners
VOID __stdcall KiAbIoBoostOwners(
_KLOCK_ENTRY *HeadEntry,
_BYTE *BoostFlags,
_SINGLE_LIST_ENTRY *ReadyList,
_SINGLE_LIST_ENTRY *PropagateBoostsList,
_SINGLE_LIST_ENTRY *SelfBoostsList){
char v6;
_SINGLE_LIST_ENTRY *v7;
_KLOCK_ENTRY *Min;
char IoQoSPriority;
_KLOCK_ENTRY **v12;
_KLOCK_ENTRY *v13;
_KLOCK_ENTRY *v14;
UINT64 BoostOutstandingIOsRequired;
_AB_PRIORITY Priority;
Priority = 0;
LODWORD(BoostOutstandingIOsRequired) = 0;
v6 = 0;
v7 = SelfBoostsList;
Min = (_KLOCK_ENTRY *)HeadEntry->OwnerTree.Min;
if( ((unsigned __int8)BoostFlags & 1) != 0 )
v6 = 2;
Priority.IoPriority = v6;
IoQoSPriority = Priority.IoQoSPriority;
if( ((unsigned __int8)BoostFlags & 2) != 0 )
IoQoSPriority = 1;
Priority.IoQoSPriority = IoQoSPriority;
while( Min )
{
KiAbSetMinimumThreadPriority(Min, &Priority, ReadyList, PropagateBoostsList, v7, &BoostOutstandingIOsRequired);
v12 = (_KLOCK_ENTRY **)Min->TreeNode.Children[1];
v13 = Min;
if( v12 )
{
v14 = *v12;
for( Min = (_KLOCK_ENTRY *)Min->TreeNode.Children[1]; v14; v14 = (_KLOCK_ENTRY *)v14->TreeNode.Children[0] )
Min = v14;
}
else
{
while( 1 )
{
Min = (_KLOCK_ENTRY *)(Min->TreeNode.ParentValue & 0xFFFFFFFFFFFFFFFCui64);
if( !Min || (_KLOCK_ENTRY *)Min->TreeNode.Children[0] == v13 )
break;
v13 = Min;
}
}
}
if( (HeadEntry->ThreadLocalFlags & 1) == 0 )
KiAbSetMinimumThreadPriority(HeadEntry, &Priority, ReadyList, PropagateBoostsList, v7, &BoostOutstandingIOsRequired);
}Referenced by:
KiAbForceProcessLockEntry
KiAbProcessContextSwitch
KiAbProcessThreadLocks