HalCalibratePerformanceCounter
VOID __stdcall HalCalibratePerformanceCounter(INT64 *Number, UINT64 NewCount){
int v2;
UINT64 v3;
__int64 v4;
char v6;
void *v7;
void *v8;
__int64 v9;
UINT64 v10;
__int64 v11;
void *v12;
void *v13;
LARGE_INTEGER CurrentTime;
v2 = *((_DWORD *)KeGetPcr() + 105);
v3 = NewCount;
v4 = HalpPerformanceCounter;
CurrentTime.QuadPart = 0i64;
if( *(_DWORD *)(HalpPerformanceCounter + 228) == 5 )
v3 = HalpTimerScaleCounter(NewCount, 0x989680ui64, *(_QWORD *)(HalpPerformanceCounter + 192));
if( v4 != HalpOriginalPerformanceCounter )
{
v10 = *(_QWORD *)(HalpOriginalPerformanceCounter + 192);
if( *(_DWORD *)(HalpOriginalPerformanceCounter + 228) == 5 )
v10 = 10000000i64;
v3 = HalpTimerScaleCounter(v3, v10, *(_QWORD *)(v4 + 192));
}
if( !v2 )
{
v6 = HalpQueryVirtualRtc(&CurrentTime, 0i64);
HalpTimerCalibratePerformanceCounter(v4, v3, v7, v8);
v9 = HalpAlwaysOnCounter;
if( HalpAlwaysOnCounter )
{
v11 = HalpTimerScaleCounter(v3, *(_QWORD *)(v4 + 192), *(_QWORD *)(HalpAlwaysOnCounter + 192));
HalpTimerCalibratePerformanceCounter(v9, v11, v12, v13);
}
if( v6 )
HalpSetVirtualRtc(&CurrentTime);
}
HalpTimerResetProfileAdjustment();
_InterlockedDecrement((volatile signed __int32 *)Number);
do
_mm_pause();
while( *(int *)Number > 0 );
}Referenced by:
HalpTscFallback
KiCalibrateTimeAdjustment