PpmParkSetLpiCap
NTSTATUS __stdcall PpmParkSetLpiCap(UINT64 LpiCap, UINT64 ThermalCap, UINT64 *LpiCapSet){
int v4;
int v5;
unsigned int v7;
unsigned int v8;
__int64 v9;
unsigned __int8 *v10;
int v11;
unsigned int v12;
unsigned int v13;
__int64 v14;
unsigned __int8 *v15;
int v16;
char v17;
v4 = ThermalCap;
v5 = LpiCap;
if( *((int *)KeGetCurrentPrcb() + 8246) >= 2 )
return -1073741823;
PpmAcquireLock(&PpmPerfPolicyLock);
v7 = (unsigned __int8)PpmParkGranularity
+ v5
- 1
- ((unsigned int)(unsigned __int8)PpmParkGranularity + v5 - 1) % (unsigned __int8)PpmParkGranularity;
if( v7 )
{
v8 = 0;
if( (_DWORD)PpmParkNumNodes )
{
v9 = (unsigned int)PpmParkNumNodes;
v10 = (unsigned __int8 *)(PpmParkNodes + 6);
do
{
v11 = *v10;
if( (unsigned __int8)v11 > (unsigned __int8)PpmParkGranularity )
v8 += v11 - (unsigned __int8)PpmParkGranularity;
v10 += 272;
--v9;
}
while( v9 );
}
if( v7 > v8 )
v7 = v8;
}
v12 = (unsigned __int8)PpmParkGranularity
+ v4
- 1
- ((unsigned int)(unsigned __int8)PpmParkGranularity + v4 - 1) % (unsigned __int8)PpmParkGranularity;
if( v12 )
{
v13 = 0;
if( (_DWORD)PpmParkNumNodes )
{
v14 = (unsigned int)PpmParkNumNodes;
v15 = (unsigned __int8 *)(PpmParkNodes + 6);
do
{
v16 = *v15;
if( (unsigned __int8)v16 > (unsigned __int8)PpmParkGranularity )
v13 += v16 - (unsigned __int8)PpmParkGranularity;
v15 += 272;
--v14;
}
while( v14 );
}
if( v12 > v13 )
v12 = v13;
}
v17 = 0;
if( v7 != PpmParkLpiCap )
{
PpmParkLpiCap = v7;
v17 = 1;
*(_DWORD *)PpmParkLpiCapChanged = 1;
}
if( v12 != PpmParkThermalCap )
{
PpmParkThermalCap = v12;
v17 = 1;
}
if( v17 )
{
PpmParkApplyPolicy();
PpmCheckReInit();
PpmCheckCustomRun(4i64);
}
else
{
PpmReleaseLock(&PpmPerfPolicyLock);
}
*(_DWORD *)LpiCapSet = v7;
return 0;
}Referenced by:
NtPowerInformation