PoSetProcessEnergyTrackingState
__int64 __fastcall PoSetProcessEnergyTrackingState(_EPROCESS *Process, _DWORD *a2){
struct _PO_PROCESS_ENERGY_CONTEXT *EnergyContext;
_POP_RW_LOCK *v5;
int v6;
_WORD *i;
int v8;
EnergyContext = Process->EnergyContext;
v5 = 0i64;
if( EnergyContext )
{
if( a2[2] || (*a2 & 0xFFFFFFEF) != 0 || (~*a2 & a2[1]) != 0 )
{
v8 = -1073741811;
}
else
{
if( (a2[3] & 1) != 0 )
{
v6 = 0;
for( i = a2 + 4; *i; ++i )
{
if( (unsigned int)++v6 >= 0x40 )
return(unsigned int)-1073741811;
}
}
v5 = (_POP_RW_LOCK *)EnergyContext;
PopAcquireRwLockExclusive((_POP_RW_LOCK *)EnergyContext + 27);
v8 = PopEtEnergyContextSetState(Process, a2);
if( v8 >= 0 )
v8 = 0;
}
if( v5 )
PopReleaseRwLock(v5 + 27);
}
else
{
return(unsigned int)-1073741637;
}
return(unsigned int)v8;
}Referenced by:
NtSetInformationProcess