KiAbProcessThreadPriorityModification
VOID __stdcall KiAbProcessThreadPriorityModification(_ETHREAD *Thread, INT8 Priority, _KPRIORITY_TYPE PriorityType){
_KPRCB *CurrentPrcb;
_SINGLE_LIST_ENTRY *p_PropagateBoostsEntry;
__int64 v5;
_SINGLE_LIST_ENTRY **v6;
CurrentPrcb = KeGetCurrentPrcb();
if( PriorityType )
{
if( PriorityType == EffectivePriorityType && Priority > Thread->Tcb.Priority )
{
if( Thread->Tcb.AbWaitEntryCount )
{
p_PropagateBoostsEntry = &Thread->Tcb.PropagateBoostsEntry;
if( Thread->Tcb.PropagateBoostsEntry.Next == (_SINGLE_LIST_ENTRY *)1 )
{
v5 = 34680i64;
LABEL_7:
v6 = (_SINGLE_LIST_ENTRY **)((char *)CurrentPrcb + v5);
if( (_KPRCB *)((char *)CurrentPrcb + v5) )
{
p_PropagateBoostsEntry->Next = *v6;
*v6 = p_PropagateBoostsEntry;
_InterlockedIncrement16(&Thread->Tcb.KeReferenceCount);
KiAbQueueAutoBoostDpc(CurrentPrcb);
}
}
}
}
}
else if( Priority < Thread->Tcb.BasePriority )
{
if( Thread->Tcb.AbOwnedEntryCount )
{
p_PropagateBoostsEntry = &Thread->Tcb.IoSelfBoostsEntry;
if( Thread->Tcb.IoSelfBoostsEntry.Next == (_SINGLE_LIST_ENTRY *)1 )
{
v5 = 34672i64;
goto LABEL_7;
}
}
}
}Referenced by:
KiDirectSwitchThread