PpmClearSimulatedIdle

NTSTATUS __stdcall PpmClearSimulatedIdle(PROCESSOR_NUMBER *ProcessorNumber){
  NTSTATUS ProcessorIndexFromNumber; 
  char v3; 
  struct _KPRCB *CurrentPrcb; 
  unsigned __int8 CurrentIrql; 
  _PPM_IDLE_STATES *IdleStates; 
  NTSTATUS v7; 
  _GROUP_AFFINITY Affinity; 
  _GROUP_AFFINITY PreviousAffinity; 

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

Referenced by:

NtPowerInformation