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