HalpTimerFindIdealClockSource
ULONG_PTR *HalpTimerFindIdealClockSource(){
char v0;
ULONG_PTR *Timer;
int v2;
ULONG_PTR *v4;
ULONG_PTR *v5;
ULONG_PTR *v6;
ULONG_PTR *v7;
ULONG_PTR *v8;
v0 = HalpTimerPlatformClockSourceForced;
if( !HalpTimerPlatformClockSourceForced )
{
Timer = HalpFindTimer(8, 96, 24576, 3840, 0);
if( Timer )
goto LABEL_8;
}
Timer = HalpFindTimer(11, 544, 0, 80, 0);
if( Timer )
goto LABEL_8;
if( !v0 && !HalpHvPresent && (__int64(__fastcall **)())HalpProfileInterface[0] != DefaultProfileInterface )
{
Timer = HalpFindTimer(0, 33, 24576, 3840, 0);
if( Timer )
goto LABEL_8;
}
Timer = HalpFindTimer(3, 352, 0, 0, 0);
if( Timer )
goto LABEL_8;
Timer = HalpFindTimer(3, 48, 0, 256, 0);
if( Timer )
goto LABEL_8;
Timer = HalpFindTimer(3, 96, 0, 3840, 0);
if( Timer )
goto LABEL_8;
Timer = HalpFindTimer(3, 48, 0, 3840, 0);
if( Timer )
goto LABEL_8;
Timer = HalpFindTimer(2, 304, 0, 0, 0);
if( Timer )
goto LABEL_8;
Timer = HalpFindTimer(6, 96, 0, 3840, 0);
if( Timer )
goto LABEL_8;
v4 = HalpFindTimer(0, 32864, 24576, 3840, 0);
Timer = v4;
if( !v4 || v4[24] < 0x7D0 )
{
v5 = HalpFindTimer(0, 32816, 24576, 3840, 0);
Timer = v5;
if( !v5 || v5[24] < 0x7D0 )
{
v6 = HalpFindTimer(0, 608, 57344, 0, 0);
Timer = v6;
if( !v6 || v6[24] < 0x7D0 )
{
v7 = HalpFindTimer(0, 96, 57344, 3840, 0);
Timer = v7;
if( !v7 || v7[24] < 0x7D0 )
{
v8 = HalpFindTimer(0, 48, 57344, 3840, 0);
Timer = v8;
if( !v8 || v8[24] < 0x7D0 )
Timer = 0i64;
}
}
}
}
if( Timer )
{
LABEL_8:
v2 = *((_DWORD *)Timer + 56);
if( (v2 & 0x50) != 0 )
return(ULONG_PTR *)(-(__int64)((v2 & 0x20) != 0) & (unsigned __int64)Timer);
else
return 0i64;
}
return Timer;
}Referenced by:
HalpTimerSelectRoles