PpmUpdateIdleStates

NTSTATUS __stdcall PpmUpdateIdleStates(PROCESSOR_IDLE_STATES_EX *ProcessorIdleStates){
  unsigned int ProcessorIndexFromNumber; 
  UINT64 v3; 
  NTSTATUS(__stdcall *v4)(_KPRCB *, UINT64, UINT64); 
  _KPRCB *v5; 
  NTSTATUS updated; 
  NTSTATUS v7; 
  _KAFFINITY_EX Affinity; 

  memset(&Affinity, 0i64, sizeof(Affinity));
  PopAcquireRwLockExclusive((_POP_RW_LOCK *)((char *)&stru_140C23628 + 984));
  if( !ProcessorIdleStates
    || (ProcessorIndexFromNumber = KeGetProcessorIndexFromNumber((UINT16 *)ProcessorIdleStates + 2),
        ProcessorIndexFromNumber == -1) )
  {
    v7 = -1073741811;
    goto LABEL_10;
  }
  if( !PpmHvUseNativeAlgorithms() )
  {
    updated = PpmUpdateIdleContext(ProcessorIndexFromNumber, ProcessorIdleStates);
    goto LABEL_9;
  }
  *(_DWORD *)&Affinity.Count = 1310721;
  memset(&Affinity.Reserved, 0i64, 0xA4u);
  KeAddProcessorAffinityEx(&Affinity.Count, ProcessorIndexFromNumber);
  if( *((_BYTE *)ProcessorIdleStates + 17) )
  {
    v3 = 0i64;
    v4 = PpmUpdateIdleStatesInplace;
  }
  else
  {
    if( !ProcessorIdleStates[29] )
    {
      v3 = 0i64;
      v4 = PpmRemoveIdleStates;
      v5 = 0i64;
      goto LABEL_8;
    }
    v3 = 3i64;
    v4 = PpmInstallNewIdleStates;
  }
  v5 = (_KPRCB *)ProcessorIdleStates;
LABEL_8:
  updated = PopExecuteOnTargetProcessors(
              &Affinity,
              (INT64 *)v4,
              v5,
              v3,
              *(UINT64 *)&Affinity.Count,
              Affinity.Bitmap[0],
              Affinity.Bitmap[1]);
LABEL_9:
  v7 = updated;
LABEL_10:
  PopReleaseRwLock((_POP_RW_LOCK *)((char *)&stru_140C23628 + 984));
  return v7;
}

Referenced by:

No references.