PpmClearSimulatedLoad

INT64 __stdcall PpmClearSimulatedLoad(PPROCESSOR_NUMBER ProcessorNumber){
  void *v2; 
  INT64 i; 
  unsigned int v4; 
  unsigned int v5; 
  __int64 v6; 
  __int64 v7; 
  __int64 v8; 
  unsigned int v9; 
  unsigned int ProcessorIndexFromNumber; 
  __int64 v11; 
  v2 = 0i64;
  PpmAcquireLock(&PpmPerfPolicyLock);
  if( *(_DWORD *)ProcessorNumber < 0 )
  {
    for( i = PpmPerfDomainHead; (INT64 *)i != &PpmPerfDomainHead; i = *(_QWORD *)i )
    {
      v4 = *(_DWORD *)(i + 200);
      v5 = 0;
      if( v4 )
      {
        v6 = *(_QWORD *)(i + 216);
        while( 1 )
        {
          v7 = 136i64 * v5;
          if( *(_DWORD *)(v7 + v6 + 16) == 1 && *(_DWORD *)(v7 + v6 + 20) == (*(_DWORD *)ProcessorNumber & 0x7FFFFFFF) )
            break;
          if( ++v5 >= v4 )
            goto LABEL_10;
        }
        v8 = *(_QWORD *)(v7 + v6);
        if( v8 )
          goto LABEL_16;
      }
LABEL_10:
      ;
    }
    goto LABEL_12;
  }
  if( ProcessorNumber->Reserved
    || (ProcessorIndexFromNumber = KeGetProcessorIndexFromNumber(ProcessorNumber), ProcessorIndexFromNumber == -1) )
  {
LABEL_12:
    v9 = -1073741811;
    goto LABEL_17;
  }
  KeGetPrcb(ProcessorIndexFromNumber);
  v8 = v11 + 33128;
LABEL_16:
  v2 = *(void **)(v8 + 24);
  *(_QWORD *)(v8 + 24) = 0i64;
  v9 = 0;
LABEL_17:
  PpmReleaseLock(&PpmPerfPolicyLock);
  if( v2 )
    ExFreePoolWithTag(v2, 0x704D5050u);
  return v9;
}

Referenced by:

NtPowerInformation