HalpTimerGetSavedPerformanceCounter
UINT64 __fastcall HalpTimerGetSavedPerformanceCounter(){
ULONG_PTR v0;
__int64 v1;
UINT64 v2;
volatile unsigned __int64 QpcBias;
__int64 v4;
UINT64 result;
UINT64 v6;
v0 = HalpPerformanceCounter;
if( *(_DWORD *)(HalpPerformanceCounter + 228) == 5 )
{
v1 = *(_QWORD *)(HalpPerformanceCounter + 208);
v2 = 10000000i64;
QpcBias = KUSER_SHARED_DATA.QpcBias;
if( HalpTimerReferencePage )
v4 = ((unsigned __int64)(*(_QWORD *)(HalpPerformanceCounter + 16) - v1)
* (unsigned __int128)*((unsigned __int64 *)HalpTimerReferencePage + 1)) >> 64;
else
v4 = HalpTimerScaleCounter(
*(_QWORD *)(HalpPerformanceCounter + 16) - v1,
*(_QWORD *)(HalpPerformanceCounter + 192),
0x989680ui64);
result = QpcBias + v4;
}
else
{
v2 = *(_QWORD *)(HalpPerformanceCounter + 192);
result = *(_QWORD *)(HalpPerformanceCounter + 16);
}
if( v0 != HalpOriginalPerformanceCounter && HalpOriginalPerformanceCounter )
{
v6 = *(_QWORD *)(HalpOriginalPerformanceCounter + 192);
if( *(_DWORD *)(HalpOriginalPerformanceCounter + 228) == 5 )
v6 = 10000000i64;
return HalpTimerScaleCounter(result, v2, v6);
}
return result;
}Referenced by:
HalpAcpiPreSleep