PpmExitCoordinatedIdleState
CHAR __fastcall PpmExitCoordinatedIdleState(volatile INT32 *a1, BOOL *a2){
UINT64 *v2;
UINT64 v3;
CHAR v4;
unsigned __int32 v7;
_LIST_ENTRY LoadOrderListHead;
__int128 v10;
v3 = *(unsigned int *)a1;
v10 = 0i64;
v4 = 0;
BYTE12(v10) = 1;
*(_QWORD *)&v10 = 0i64;
LoadOrderListHead.Flink = 0i64;
LoadOrderListHead.Blink = (_LIST_ENTRY *)PopCoordinatedIdleExitTimeout;
*(_BYTE *)a2 = 0;
while( (_DWORD)v3 )
{
if( (v3 & 0x4000000) != 0 )
{
v7 = _InterlockedCompareExchange(
a1,
v3 & 0xFA000FFF | ((*((_DWORD *)KeGetPcr() + 105) & 0xFFF | 0x2000) << 12),
v3);
if( (_DWORD)v3 == v7 )
{
v4 = 1;
*(_BYTE *)a2 = (v3 & 0xFFF) == *((_DWORD *)KeGetPcr() + 105);
return v4;
}
v3 = v7;
}
else
{
if( (v3 & 0x3000000) == 0x2000000 )
{
v3 = ((unsigned int)v3 >> 12) & 0xFFF;
if( (_DWORD)v3 == *((_DWORD *)KeGetPcr() + 105) )
{
v4 = 1;
*(_BYTE *)a2 = 1;
return v4;
}
}
PpmIdleTransitionStall(&LoadOrderListHead, (_RTL_PROCESS_MODULES *)a2, v3, v2);
v3 = *(unsigned int *)a1;
}
}
return v4;
}Referenced by:
PpmExitCoordinatedIdle