PpmSetSimulatedIdle

__int64 __fastcall PpmSetSimulatedIdle(__int64 a1){
  NTSTATUS ProcessorIndexFromNumber; 
  char v4; 
  struct _KPRCB *CurrentPrcb; 
  unsigned __int8 CurrentIrql; 
  _PPM_IDLE_STATES *IdleStates; 
  unsigned int v8; 
  unsigned int v9; 
  _GROUP_AFFINITY Affinity; 
  _GROUP_AFFINITY PreviousAffinity; 

  Affinity = 0i64;
  PreviousAffinity = 0i64;
  ProcessorIndexFromNumber = KeGetProcessorIndexFromNumber((UINT16 *)(a1 + 4));
  if( ProcessorIndexFromNumber == -1 )
    return 3221225485i64;
  *(_DWORD *)Affinity.Reserved = 0;
  Affinity.Reserved[2] = 0;
  v4 = KiProcessorIndexToNumberMappingTable[ProcessorIndexFromNumber] & 0x3F;
  Affinity.Group = (unsigned int)KiProcessorIndexToNumberMappingTable[ProcessorIndexFromNumber] >> 6;
  Affinity.Mask = 1i64 << v4;
  KeSetSystemGroupAffinityThread(&Affinity, &PreviousAffinity);
  CurrentPrcb = KeGetCurrentPrcb();
  CurrentIrql = KeGetCurrentIrql();
  __writecr8(2ui64);
  IdleStates = CurrentPrcb->PowerState.IdleStates;
  if( IdleStates )
  {
    v9 = *(_DWORD *)a1;
    if( *(_DWORD *)a1 < IdleStates->ProcessorIdleCount )
    {
      IdleStates->IdleOverride = 1;
      v8 = 0;
      IdleStates->OverrideIndex = v9;
    }
    else
    {
      v8 = -1073741811;
    }
  }
  else
  {
    v8 = -1073741637;
  }
  __writecr8(CurrentIrql);
  KeRevertToUserGroupAffinityThread(&PreviousAffinity);
  return v8;
}

Referenced by:

NtPowerInformation