KeCheckAndApplyBamQos

CHAR __fastcall KeCheckAndApplyBamQos(INT64 a1, INT64 a2, INT64 a3, INT64 a4){
  unsigned __int64 v4; 
  unsigned int v6; 
  unsigned __int64 v7; 
  __int64 v8; 
  int v9; 
  unsigned int v10; 
  __int16 v12; 
  void *retaddr; 
  v4 = (unsigned __int64)&retaddr;
  if( KeHeteroSystemQos )
  {
    _disable();
    LODWORD(v4) = *(_DWORD *)(a1 + 236);
    v6 = (unsigned __int8)*(_DWORD *)(a2 + 512);
    if( v6 != (unsigned __int8)v4 )
    {
      v7 = *(unsigned __int8 *)(a1 + 209);
      v8 = *(_QWORD *)(a1 + 192);
      if( v6 - 1 > 1 )
        _interlockedbittestandreset64((volatile signed __int32 *)(v8 + 368), v7);
      else
        _interlockedbittestandset64((volatile signed __int32 *)(v8 + 368), v7);
      v9 = *(_DWORD *)(a1 + 236) & 0x300;
      v10 = PoSetProcessorQoS(a1, v6, a3, a4) ? *(_DWORD *)(a1 + 236) & 0xFFFFFCFF : *(_DWORD *)(a1 + 236) & 0xFFFFFCFF | ((v6 & 3) << 8);
      *(_DWORD *)(a1 + 236) = v10;
      v4 = v9 != 0;
      if( (_DWORD)v4 != ((v10 & 0x300) != 0) )
        LOBYTE(v4) = KeUpdatePendingQosRequest(a1);
    }
    if( (v12 & 0x200) != 0 )
      _enable();
  }
  return v4;
}

Referenced by:

KeClockInterruptNotify
KeSetThreadSchedulerAssist
PsImpersonateContainerOfThread
SwapContext