time-nt.cpp revision ab79888f2d6b4c61dd9ed587aec2bd70dcc17966
* Copyright (C) 2006-2014 Oracle Corporation * This file is part of VirtualBox Open Source Edition (OSE), as * you can redistribute it and/or modify it under the terms of the GNU * General Public License (GPL) as published by the Free Software * Foundation, in version 2 as it comes in the "COPYING" file of the * VirtualBox OSE distribution. VirtualBox OSE is distributed in the * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. * The contents of this file may alternatively be used under the terms * of the Common Development and Distribution License Version 1.0 * (CDDL) only, as it comes in the "COPYING.CDDL" file of the * VirtualBox OSE distribution, in which case the provisions of the * CDDL are applicable instead of those of the GPL. * You may elect to license modified versions of this file under the * terms and conditions of either the GPL or the CDDL or both. /******************************************************************************* *******************************************************************************/ /******************************************************************************* *******************************************************************************/ /** Whether we've tried to resolve g_pfnRtlGetSystemTimePrecise or not. */ /** Pointer to RtlGetSystemTimePrecise, added in 6.2 (windows 8). */ * Make sure we don't recurse here when calling into RTLdr. * If there is precise time, get the precise system time and calculate the * interrupt time from it. (Microsoft doesn't expose interrupt time to user * application, which is very unfortunate as there are a lot place where * monotonic time is applicable but developer is "forced" to use wall clock.) /* Calc QPC delta since base line. */ /* Multiply by 10 million. */ /* Multiply by QPC interrupt time increment value. */ /* Shift the upper 64 bits by the increment shift factor. */ /* Add to base interrupt time value. */ /* Convert from NT unit to nano seconds. */ * Just read interrupt time. * Get the precise time if possible. * UTC = local + TimeZoneBias; The bias is given in NT units.