PpmUpdateProcessorIdleVeto

NTSTATUS __stdcall PpmUpdateProcessorIdleVeto(PROCESSOR_IDLE_VETO *IdleVeto){
  unsigned int ProcessorIndexFromNumber; 
  _KPRCB *Prcb; 
  int updated; 
  unsigned __int8 v5; 
  _PPM_IDLE_STATES *IdleStates; 
  unsigned __int64 v7; 
  __int64 v9; 
  _KAFFINITY_EX Affinity; 

  memset(Affinity.Bitmap, 0i64, sizeof(Affinity.Bitmap));
  ProcessorIndexFromNumber = KeGetProcessorIndexFromNumber((UINT16 *)IdleVeto + 2);
  Prcb = KeGetPrcb(ProcessorIndexFromNumber);
  if( ProcessorIndexFromNumber == -1 )
    return -1073741811;
  v5 = KeAcquireSpinLockRaiseToDpc((UINT64 *)&stru_140C23628 + 122);
  IdleStates = Prcb->PowerState.IdleStates;
  v7 = v5;
  if( IdleStates )
  {
    v9 = (unsigned int)IdleVeto[2];
    if( (unsigned int)v9 < IdleStates->ProcessorIdleCount )
    {
      updated = PpmUpdateIdleVeto(
                  *((_BYTE *)IdleVeto + 16),
                  (unsigned int)IdleVeto[3],
                  &IdleStates->State[v9].VetoAccounting);
      if( updated >= 0 )
        PpmEventProcessorVetoRequest((__int64)Prcb, IdleVeto[2], IdleVeto[3], *((_BYTE *)IdleVeto + 16));
    }
    else
    {
      updated = -1073741811;
    }
  }
  else
  {
    updated = -1073741637;
  }
  KxReleaseSpinLock((UINT64 *)&stru_140C23628 + 122);
  __writecr8(v7);
  return updated;
}

Referenced by:

No references.