PopIdleWakeFindOrAllocateWakeSource
_BYTE *__fastcall PopIdleWakeFindOrAllocateWakeSource(INT64 a1, INT64 a2, INT64 a3, UINT8 a4){
int v4;
int v6;
_BYTE *v8;
int v9;
_BYTE *i;
v4 = a2;
v6 = a4;
if( (unsigned int)a2 <= 4 )
return(_BYTE *)(696i64 * (int)a2 + a1 + 280);
v9 = 5;
for( i = (_BYTE *)(a1 + 4076); ; i += 696 )
{
v8 = i - 316;
if( !*((_DWORD *)i - 1) )
break;
if( v4 == *(_DWORD *)v8 && (_BYTE)v6 == (*i & 1) && PopIdleWakeAreIdenticalWakeSources(v4, i - 308, (_QWORD *)a3) )
return v8;
if( (unsigned int)++v9 >= 0x19 )
return(_BYTE *)(a1 + 3064);
}
*(_DWORD *)v8 = v4;
*(_OWORD *)(v8 + 8) = *(_OWORD *)a3;
*(_OWORD *)(v8 + 24) = *(_OWORD *)(a3 + 16);
*(_OWORD *)(v8 + 40) = *(_OWORD *)(a3 + 32);
*(_OWORD *)(v8 + 56) = *(_OWORD *)(a3 + 48);
*(_OWORD *)(v8 + 72) = *(_OWORD *)(a3 + 64);
*(_OWORD *)(v8 + 88) = *(_OWORD *)(a3 + 80);
*(_OWORD *)(v8 + 104) = *(_OWORD *)(a3 + 96);
*(_OWORD *)(v8 + 120) = *(_OWORD *)(a3 + 112);
*((_QWORD *)v8 + 17) = *(_QWORD *)(a3 + 128);
*(_DWORD *)i ^= (*(_DWORD *)i ^ v6) & 1;
return v8;
}Referenced by:
PopIdleWakeStopActiveIntervalAccounting