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