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