PoSetProcessorQoS

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

Referenced by:

KeCheckAndApplyBamQos
KeClockInterruptNotify