HalpTimerInitialize
__int64 __fastcall HalpTimerInitialize(INT64 a1, void *a2, void *a3, void *a4){
__int64 v5;
void *v6;
int v7;
void *v8;
void *v9;
__int64 v10;
void *v11;
void *v12;
if( (*(_DWORD *)(a1 + 184) & 2) != 0 )
{
v7 = 0;
}
else
{
HalpTimerGetInternalData((_KDPC *)a1, a2, a3, a4);
v7 = (*(__int64(__fastcall **)(__int64))(a1 + 104))(v5);
if( v7 < 0 )
{
*(_DWORD *)(a1 + 256) = v7;
HalpTimerLastProblem = 15;
*(_DWORD *)(a1 + 252) = 15;
*(_QWORD *)(a1 + 264) = "minkernel\\hals\\lib\\timers\\common\\timer.c";
*(_DWORD *)(a1 + 272) = 2563;
}
else
{
if( (*(_DWORD *)(a1 + 224) & 2) != 0 )
{
HalpTimerGetInternalData((_KDPC *)a1, v6, v8, v9);
_InterlockedExchange64((volatile __int64 *)(a1 + 200), (*(__int64(__fastcall **)(__int64))(a1 + 112))(v10));
HalpTimerCalibratePerformanceCounter(a1, 0i64, v11, v12);
}
if( *(_DWORD *)(a1 + 228) == 3 )
HalpTimerNoteHpetMaskingBehavior();
}
}
*(_DWORD *)(a1 + 184) |= (v7 >> 31) + 2;
return(unsigned int)v7;
}Referenced by:
HalpTimerInitializeEarlyStallSource
HalpTimerInitializeHypervisorTimer
HalpTimerMeasureFrequencies
HalpTimerSelectRoles