HalpQueryVirtualRtc
NTSTATUS __stdcall HalpQueryVirtualRtc(LARGE_INTEGER *CurrentTime, UINT8 *RtcValid){
__int64 v4;
LARGE_INTEGER v5;
LARGE_INTEGER v6;
LONGLONG v7;
__int16 v9[20];
union _LARGE_INTEGER PerformanceFrequency;
LARGE_INTEGER v11;
PerformanceFrequency.QuadPart = 0i64;
*(_OWORD *)v9 = 0i64;
if( SystemPowerPhase == 2 )
goto LABEL_8;
while( 1 )
{
v4 = VrtcTime;
v11.QuadPart = qword_140C4A38C;
v5 = KeQueryPerformanceCounter(&PerformanceFrequency);
if( v4 == qword_140C4A398 )
break;
_mm_pause();
}
RtlpTimeToTimeFields(&v11, v9, v6);
LODWORD(v7) = 1601;
if( v9[0] <= 1601 )
{
LABEL_8:
LOBYTE(v7) = 0;
}
else
{
v7 = v11.QuadPart + 10000000 * (v5.QuadPart - v4) / PerformanceFrequency.QuadPart;
CurrentTime->QuadPart = v7;
if( RtcValid )
*RtcValid = HalpVrtcTimeStale == 0;
LOBYTE(v7) = 1;
}
return v7;
}Referenced by:
HalCalibratePerformanceCounter
HalQueryRealTimeClock
HalpSetResumeTime