HalUpdateTimerCapabilities
VOID __fastcall HalUpdateTimerCapabilities(VOID *TimerData, UINT64 SetNewCapabilities, UINT64 ClearNewCapabilities){
int v3;
INT64 *v5;
INT64 *v6;
int v7;
int v8;
bool v9;
v3 = SetNewCapabilities;
if( (((unsigned int)ClearNewCapabilities | (unsigned int)SetNewCapabilities) & 0xFFFF9FFF) == 0
&& ((unsigned int)SetNewCapabilities & (unsigned int)ClearNewCapabilities) == 0
&& TimerData )
{
v5 = (INT64 *)HalpRegisteredTimers;
do
{
if( v5 == &HalpRegisteredTimers )
{
HalpTimerLastProblem = 13;
return;
}
v6 = v5;
v5 = (INT64 *)*v5;
}
while( (VOID *)v6[9] != TimerData );
v7 = *((_DWORD *)v6 + 56);
v8 = ~(_DWORD)ClearNewCapabilities & (v3 | v7);
v9 = v6 == (INT64 *)HalpPerformanceCounter;
*((_DWORD *)v6 + 56) = v8;
if( v9
&& *((_DWORD *)v6 + 57) == 5
&& ((((unsigned __int16)v3 ^ (unsigned __int16)v7) & 0x2000) != 0
|| (v8 & 0x4000) != 0 && (unsigned __int8)HalpTimerDeepestIdleState > 1u) )
{
byte_140C4A410 = 1;
}
}
else
{
HalpTimerLastProblem = 12;
}
}Referenced by:
HalpArtInitialize
HalpTscInitialize