KiAbSetMinimumThreadPriority

__int64 __fastcall KiAbSetMinimumThreadPriority(__int64 a1, __int64 a2, __int64 a3, _QWORD *a4, _QWORD *a5, _DWORD *a6){
  __int64 v7; 
  unsigned int v8; 
  int v9; 
  CHAR CpuPriorityKey; 
  void *v11; 
  void *v12; 
  _DWORD *v13; 
  char *v14; 
  ULONG_PTR v15; 
  UINT64 *v16; 
  __int64 v17; 
  int v18; 
  char v20; 
  int v21; 
  int v22; 
  UINT64 SpinCount[10]; 
  v7 = a1 - 16i64 * *(unsigned __int8 *)(a1 + 24);
  PsGetIoPriorityThread(v7);
  v8 = 0;
  v9 = 0;
  *a6 = 0;
  CpuPriorityKey = KiAbEntryGetCpuPriorityKey((unsigned __int8 *)a1);
  v15 = *v14;
  if( CpuPriorityKey < (char)v15 )
  {
    *(_WORD *)(a1 + 88) ^= (*(_WORD *)(a1 + 88) ^ (*(_WORD *)(a1 + 88) & 0x7FFF | (1 << (v15 - 1)))) & 0x7FFF;
    LODWORD(SpinCount[0]) = 0;
    while( _interlockedbittestandset64((volatile signed __int32 *)(v7 + 64), 0i64) )
    {
      do
        KeYieldProcessorEx(SpinCount);
      while( *(_QWORD *)(v7 + 64) );
    }
    v20 = *(_BYTE *)(v15 + v7 + 824);
    if( v20 == -1 )
      KeBugCheckEx(0x157u, v7, v15, 1ui64, 0i64);
    *(_BYTE *)(v15 + v7 + 824) = v20 + 1;
    v9 = 0;
    *(_DWORD *)(v7 + 856) |= 1 << v15;
    if( *(char *)(v7 + 195) < (char)v15 )
    {
      KiSetPriorityThread((_KTHREAD *)v7, (_SINGLE_LIST_ENTRY *)a3, (unsigned int)v15);
      v9 = 1;
    }
    KiReleaseThreadLockSafe(v7);
    v13 = a6;
  }
  else
  {
    LOBYTE(v15) = 0;
  }
  PsGetBaseIoPriorityThread((KDPC *)v7, v11, v12, v13);
  if( v18 < *(char *)(v17 + 1) && *(__int16 *)(a1 + 88) >= 0 )
  {
    KiAbThreadBoostIoPriority((_ETHREAD *)v7, (_SINGLE_LIST_ENTRY *)a5, 0i64, v16);
    if( v21 )
    {
      *(_WORD *)(a1 + 88) |= 0x8000u;
      v9 = 1;
    }
  }
  if( (*(_DWORD *)(v7 + 1368) == 0) < *(char *)(a2 + 2) && (*(_BYTE *)(a1 + 90) & 1) == 0 )
  {
    KiAbThreadBoostIoPriority((_ETHREAD *)v7, (_SINGLE_LIST_ENTRY *)a5, 1ui64, (UINT64 *)a6);
    if( v22 )
    {
      *(_WORD *)(a1 + 90) |= 1u;
      v9 = 1;
    }
  }
  if( a4 && v9 && *(_BYTE *)(v7 + 793) )
    KiAbThreadInsertList((_KTHREAD *)v7, (_SINGLE_LIST_ENTRY *)a4, (_SINGLE_LIST_ENTRY *)(v7 + 808));
  LOBYTE(v8) = (_BYTE)v15 != 0;
  return v8;
}

Referenced by:

KiAbCpuBoostOwners
KiAbIoBoostOwners
KiAbProcessContextSwitch
KiAbProcessThreadLocks