RtlGetSystemTimePrecise
NTSTATUS __stdcall RtlGetSystemTimePrecise(){
unsigned __int64 TimeUpdateLock;
unsigned int LowPart;
unsigned __int64 BaselineSystemTimeQpc;
unsigned __int64 QpcSystemTimeIncrement;
unsigned __int8 QpcSystemTimeIncrementShift;
UINT64 PerformanceCounter;
__int64 v6;
while( 1 )
{
TimeUpdateLock = KUSER_SHARED_DATA.TimeUpdateLock;
if( (KUSER_SHARED_DATA.TimeUpdateLock & 1) == 0 )
{
LowPart = KUSER_SHARED_DATA.SystemTime.LowPart;
BaselineSystemTimeQpc = KUSER_SHARED_DATA.BaselineSystemTimeQpc;
QpcSystemTimeIncrement = KUSER_SHARED_DATA.QpcSystemTimeIncrement;
QpcSystemTimeIncrementShift = KUSER_SHARED_DATA.QpcSystemTimeIncrementShift;
PerformanceCounter = KeQueryPerformanceCounter(0i64);
if( KUSER_SHARED_DATA.TimeUpdateLock == TimeUpdateLock )
break;
}
_mm_pause();
}
if( PerformanceCounter <= BaselineSystemTimeQpc )
return LowPart;
v6 = PerformanceCounter - BaselineSystemTimeQpc - 1;
if( QpcSystemTimeIncrementShift )
v6 <<= QpcSystemTimeIncrementShift;
return(((unsigned __int64)v6 * (unsigned __int128)QpcSystemTimeIncrement) >> 64) + LowPart;
}Referenced by:
EtwGetKernelTraceTimestamp
EtwGetKernelTraceTimestampSilo
EtwpGetLoggerTimeStamp
EtwpReserveTraceBuffer
EtwpTraceSystemInitialization
HalpSetVirtualRtc
KeQuerySystemTimePrecise
KeSetTimer2
KiExecuteAllDpcs
PspInitPhase2
WmiGetClock