PoSetProcessorQoS

char __fastcall PoSetProcessorQoS(INT64 a1, signed int a2, __int64 a3, INT64 a4){
  bool v4; 
  char v5; 
  char v8; 
  __int64 v9; 
  int v10; 
  unsigned __int64 v11; 
  unsigned __int64 v12; 
  signed int v13; 
  bool v14; 
  unsigned __int64 v15; 
  bool v16; 
  __int16 v18; 

  v4 = 0;
  v5 = 0;
  v8 = 1;
  if( a2 == *(_DWORD *)(a1 + 33264) )
    return v8;
  v9 = *(_QWORD *)(a1 + 33136);
  if( v9 && *(_BYTE *)(v9 + 125) )
  {
    v5 = 1;
    _disable();
    v4 = (v18 & 0x200) != 0;
    KxAcquireSpinLock((UINT64 *)(v9 + 128));
  }
  v10 = *(unsigned __int16 *)(a1 + 33272);
  if( _bittest(&v10, a2) )
    goto LABEL_19;
  v11 = __rdtsc();
  v12 = v11 - *(_QWORD *)(a1 + 33248);
  v13 = *(_DWORD *)(a1 + 33264);
  v14 = a2 == 3 || v13 == 3;
  if( a2 == 4 && v13 || !a2 || a2 <= v13 && !v14 || v12 >= *(_QWORD *)(a1 + 33256) || *(_BYTE *)(a1 + 33213) )
  {
    v15 = 2i64 * *(_QWORD *)(a1 + 33256);
    *(_QWORD *)(a1 + 33248) = v11;
    *(_BYTE *)(a1 + 33213) = v12 >= v15;
LABEL_19:
    v16 = PpmPerfVmQosSupported == 0;
    *(_DWORD *)(a1 + 33264) = a2;
    if( v16 )
      PpmPerfArbitratorApplyProcessorState(a1, 1u, 0, a4);
    else
      PpmHvSetVirtualProcessorQos(a1);
    *(_BYTE *)(a1 + 236) = a2;
    goto LABEL_23;
  }
  v8 = 0;
LABEL_23:
  if( v5 )
  {
    KxReleaseSpinLock((UINT64 *)(v9 + 128));
    if( v4 )
      _enable();
  }
  return v8;
}

Referenced by:

KeCheckAndApplyBamQos
KeClockInterruptNotify
KiUpdateRunTime