PopDripsWatchdogCallbackWorker
VOID __fastcall PopDripsWatchdogCallbackWorker(INT64 a1){
char v2;
__int64 v3;
UINT64 *v4;
int v5;
__int128 v6;
int v7;
__int128 v8;
unsigned int v9;
int v10;
int v11;
UINT64 v12;
UINT64 v13;
INT64 v14[2];
__int128 v15;
CHAR a6;
unsigned int a2;
INT64 a5;
*(_OWORD *)v14 = 0i64;
v15 = 0i64;
PopDripsWatchdogAcquireContextLock((ERESOURCE *)a1);
if( (*(_DWORD *)(a1 + 104) & 4) != 0 && (*(_DWORD *)(a1 + 292) & 2) != 0 )
{
v2 = 1;
++*(_DWORD *)(a1 + 640);
++*(_DWORD *)(a1 + 308);
PopDripsWatchdogScheduleNextTimer(a1 + 112);
v3 = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
PopCalculateIdleInformation((INT64)v14, v4);
v5 = DWORD2(v15) - *(_DWORD *)(a1 + 368);
if( DWORD2(v15) != *(_DWORD *)(a1 + 368) )
{
v6 = *(_OWORD *)v14;
v7 = PopDripsWatchdogDebounceTickInterval;
v8 = v15;
*(_DWORD *)(a1 + 308) = 0;
*(_OWORD *)(a1 + 344) = v6;
*(_QWORD *)(a1 + 328) = v3;
*(_OWORD *)(a1 + 360) = v8;
*(_DWORD *)(a1 + 312) = v7;
*(_QWORD *)(a1 + 320) = v3;
}
v9 = *(_DWORD *)(a1 + 312);
if( v9 )
{
if( *(_DWORD *)(a1 + 308) < v9 )
{
PopDirectedDripsClearDisengageReason(0);
}
else
{
PopDirectedDripsSetDisengageReason(0);
*(_DWORD *)(a1 + 312) = PopDripsWatchdogDebounceTickInterval + *(_DWORD *)(a1 + 308);
}
}
v10 = *(_DWORD *)(a1 + 292);
if( (v10 & 4) == 0 )
{
v11 = *(_DWORD *)(a1 + 108);
v12 = v3 - *(_QWORD *)(a1 + 320);
v13 = v3 - *(_QWORD *)(a1 + 328);
a2 = *(_DWORD *)(a1 + 304);
a5 = *(_QWORD *)(a1 + 648);
a6 = *(_BYTE *)(a1 + 336);
*(_DWORD *)(a1 + 292) = v10 | 4;
PopDripsWatchdogReleaseContextLock((_ERESOURCE *)a1);
PopAcquirePolicyLock();
if( v5 || qword_140C4FC98 )
v2 = 0;
PopReleasePolicyLock();
if( v2 )
PopDripsWatchdogCallbackHandler(v11, a2, v12, v13, a5, a6);
PopDripsWatchdogAcquireContextLock((ERESOURCE *)a1);
*(_QWORD *)(a1 + 320) = v3;
*(_DWORD *)(a1 + 292) &= ~4u;
}
}
PopDripsWatchdogReleaseContextLock((_ERESOURCE *)a1);
}Referenced by:
No references.