PoGetPerfStateAndParkingInfo

CHAR __fastcall PoGetPerfStateAndParkingInfo(PPROCESSOR_NUMBER ProcNumber, UINT64 a5, _KPRCB *a3, UINT64 *a4){
  unsigned int ProcessorIndexFromNumber; 
  _KPRCB *Prcb; 
  _PROC_PERF_DOMAIN *Domain; 
  _KPRCB *v11; 
  unsigned int NominalFrequency; 
  unsigned int MaxPolicyPercent; 
  UINT64 SnapTimeLast; 
  unsigned __int8 CurrentIrql; 
  UINT64 v16; 
  NTSTATUS ThroughputInfoCallback; 
  unsigned int v18; 
  UINT64 *Flags; 
  UINT64 *LimitReasons; 
  __int64 GuaranteedFrequency[2]; 
  _KAFFINITY_EX Affinity; 

  memset(Affinity.Bitmap, 0i64, sizeof(Affinity.Bitmap));
  LODWORD(GuaranteedFrequency[0]) = 0;
  *(_OWORD *)a5 = 0i64;
  *(_OWORD *)(a5 + 16) = 0i64;
  ProcessorIndexFromNumber = KeGetProcessorIndexFromNumber(&ProcNumber->Group);
  Prcb = KeGetPrcb(ProcessorIndexFromNumber);
  Domain = Prcb->PowerState.CheckContext.Domain;
  v11 = Prcb;
  PpmPerfGetCurrentState(
    Prcb,
    (UINT64 *)(a5 + 4),
    (UINT64 *)GuaranteedFrequency,
    (UINT64 *)(a5 + 8),
    (UINT64 *)a5,
    (UINT64 *)(a5 + 24));
  if( Domain )
  {
    NominalFrequency = Domain->NominalFrequency;
    *(_DWORD *)(a5 + 12) = Domain->QosPolicies[0].MinPolicyPercent;
    MaxPolicyPercent = Domain->QosPolicies[0].MaxPolicyPercent;
    if( MaxPolicyPercent >= Domain->QosPolicies[0].MaxEquivalentFrequencyPercent )
      MaxPolicyPercent = Domain->QosPolicies[0].MaxEquivalentFrequencyPercent;
    *(_DWORD *)(a5 + 16) = MaxPolicyPercent;
    if( Domain->MaxPercent != Domain->MinThrottlePercent )
      *(_BYTE *)(a5 + 28) = 1;
    if( MaxPolicyPercent < 0x64 )
      *(_DWORD *)(a5 + 24) |= 1u;
    LODWORD(SnapTimeLast) = 100 * LODWORD(GuaranteedFrequency[0]) / Domain->NominalFrequency;
  }
  else
  {
    NominalFrequency = v11->MHz;
    LODWORD(SnapTimeLast) = 100;
  }
  *(_DWORD *)(a5 + 20) = SnapTimeLast;
  LOBYTE(SnapTimeLast) = v11->PowerState.Parked;
  *(_BYTE *)(a5 + 29) = SnapTimeLast;
  if( a4 )
  {
    SnapTimeLast = v11->PowerState.SnapTimeLast;
    *a4 = SnapTimeLast;
  }
  if( a3 )
  {
    CurrentIrql = KeGetCurrentIrql();
    __writecr8(2ui64);
    v16 = NominalFrequency;
    ThroughputInfoCallback = PpmGetThroughputInfoCallback(v11, (UINT64)a3, NominalFrequency);
    LOBYTE(SnapTimeLast) = CurrentIrql;
    __writecr8(CurrentIrql);
    if( ThroughputInfoCallback < 0 )
    {
      *(_DWORD *)&Affinity.Count = 1310721;
      memset(&Affinity.Reserved, 0i64, 0xA4u);
      v18 = KeGetProcessorIndexFromNumber(&ProcNumber->Group);
      KeAddProcessorAffinityEx(&Affinity.Count, v18);
      LOBYTE(SnapTimeLast) = PopExecuteOnTargetProcessors(
                               &Affinity,
                               (INT64 *)PpmGetThroughputInfoCallback,
                               a3,
                               v16,
                               (UINT64)Flags,
                               (UINT64)LimitReasons,
                               GuaranteedFrequency[0]);
    }
  }
  return SnapTimeLast;
}

Referenced by:

ExpQueryProcessorInformationCounters
ExpQuerySystemInformation