PpmSetSimulatedIdle

INT64 __fastcall PpmSetSimulatedIdle(INT64 a1){
  int ProcessorIndexFromNumber; 
  char v4; 
  struct _KPRCB *CurrentPrcb; 
  unsigned __int8 CurrentIrql; 
  __int64 v7; 
  unsigned int v8; 
  int v9; 
  struct _GROUP_AFFINITY Affinity; 
  struct _GROUP_AFFINITY PreviousAffinity; 
  Affinity = 0i64;
  PreviousAffinity = 0i64;
  ProcessorIndexFromNumber = KeGetProcessorIndexFromNumber((_PROCESSOR_NUMBER *)(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);
  v7 = *((_QWORD *)CurrentPrcb + 4096);
  if( v7 )
  {
    v9 = *(_DWORD *)a1;
    if( *(_DWORD *)a1 < *(_DWORD *)(v7 + 32) )
    {
      *(_BYTE *)(v7 + 1) = 1;
      v8 = 0;
      *(_DWORD *)(v7 + 28) = v9;
    }
    else
    {
      v8 = -1073741811;
    }
  }
  else
  {
    v8 = -1073741637;
  }
  __writecr8(CurrentIrql);
  KeRevertToUserGroupAffinityThread(&PreviousAffinity);
  return v8;
}

Referenced by:

NtPowerInformation