HalpTimerSchedulePeriodicQueries
INT64 __stdcall HalpTimerSchedulePeriodicQueries(){
ULONG_PTR v0;
ULONG_PTR v1;
__int64 v2;
ULONGLONG v3;
INT64 result;
ULONGLONG v5;
ULONGLONG pullResult;
ULONGLONG v7;
pullResult = 0i64;
v0 = HalpAlwaysOnCounter;
v1 = HalpPerformanceCounter;
if( HalpAlwaysOnCounter )
v0 = -(__int64)(*(_DWORD *)(HalpAlwaysOnCounter + 220) < 0x40u) & HalpAlwaysOnCounter;
KeQueryPerformanceCounter(0i64);
HalpTimerLastDpc = *(_QWORD *)&KUSER_SHARED_DATA.SystemTime.LowPart;
if( RtlULongLongMult(1i64 << *(_DWORD *)(v1 + 220), 0xFAui64, &pullResult) < 0 )
v3 = 120000i64;
else
v3 = pullResult / *(_QWORD *)(v1 + 192);
v7 = v3;
if( v0 )
{
v5 = RtlULongLongMult(v2 << *(_DWORD *)(v0 + 220), 0xFAui64, &v7) < 0 ? 120000i64 : v7 / *(_QWORD *)(v0 + 192);
if( v5 < v3 )
v3 = v5;
}
if( v3 - 1 > 0x1D4BF )
LODWORD(v3) = 120000;
KiSetTimerEx(
(_KTIMER *)&HalpTimerPeriodicTimer,
(_LARGE_INTEGER)(-10000i64 * (int)v3),
(unsigned int)v3,
0,
&HalpTimerDpc);
return result;
}Referenced by:
HalpTscFallbackToPlatformSource