PpmUpdateIdleStates
NTSTATUS __stdcall PpmUpdateIdleStates(PROCESSOR_IDLE_STATES_EX *ProcessorIdleStates){
unsigned int ProcessorIndexFromNumber;
UINT64 v3;
NTSTATUS(__stdcall *v4)(_KPRCB *, UINT64, UINT64);
_KPRCB *v5;
NTSTATUS updated;
NTSTATUS v7;
_KAFFINITY_EX Affinity;
memset(&Affinity, 0i64, sizeof(Affinity));
PopAcquireRwLockExclusive((_POP_RW_LOCK *)((char *)&stru_140C23628 + 984));
if( !ProcessorIdleStates
|| (ProcessorIndexFromNumber = KeGetProcessorIndexFromNumber((UINT16 *)ProcessorIdleStates + 2),
ProcessorIndexFromNumber == -1) )
{
v7 = -1073741811;
goto LABEL_10;
}
if( !PpmHvUseNativeAlgorithms() )
{
updated = PpmUpdateIdleContext(ProcessorIndexFromNumber, ProcessorIdleStates);
goto LABEL_9;
}
*(_DWORD *)&Affinity.Count = 1310721;
memset(&Affinity.Reserved, 0i64, 0xA4u);
KeAddProcessorAffinityEx(&Affinity.Count, ProcessorIndexFromNumber);
if( *((_BYTE *)ProcessorIdleStates + 17) )
{
v3 = 0i64;
v4 = PpmUpdateIdleStatesInplace;
}
else
{
if( !ProcessorIdleStates[29] )
{
v3 = 0i64;
v4 = PpmRemoveIdleStates;
v5 = 0i64;
goto LABEL_8;
}
v3 = 3i64;
v4 = PpmInstallNewIdleStates;
}
v5 = (_KPRCB *)ProcessorIdleStates;
LABEL_8:
updated = PopExecuteOnTargetProcessors(
&Affinity,
(INT64 *)v4,
v5,
v3,
*(UINT64 *)&Affinity.Count,
Affinity.Bitmap[0],
Affinity.Bitmap[1]);
LABEL_9:
v7 = updated;
LABEL_10:
PopReleaseRwLock((_POP_RW_LOCK *)((char *)&stru_140C23628 + 984));
return v7;
}Referenced by:
No references.