diff options
Diffstat (limited to 'sal')
-rw-r--r-- | sal/osl/w32/time.c | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/sal/osl/w32/time.c b/sal/osl/w32/time.c index 90d659a8cca0..325c57e9831a 100644 --- a/sal/osl/w32/time.c +++ b/sal/osl/w32/time.c @@ -35,10 +35,28 @@ sal_Bool SAL_CALL osl_getSystemTime(TimeValue* pTimeVal) FILETIME CurTime, OffTime; __int64 Value; + typedef BOOL (WINAPI *CheckTokenMembership_PROC)( HANDLE, PSID, PBOOL ); + + static HMODULE hModule = NULL; + static CheckTokenMembership_PROC pCheckTokenMembership = NULL; + OSL_ASSERT(pTimeVal != 0); - GetSystemTime(&SystemTime); - SystemTimeToFileTime(&SystemTime, &CurTime); + if ( !hModule ) + { + hModule = GetModuleHandleA( "Kernel32.dll" ); + if ( hModule ) + pCheckTokenMembership = (CheckTokenMembership_PROC)GetProcAddress( hModule, "GetSystemTimePreciseAsFileTime" ); + } + + // use ~1 microsecond resolution if available + if ( pCheckTokenMembership ) + GetSystemTimePreciseAsFileTime(&CurTime); + else + { + GetSystemTime(&SystemTime); + SystemTimeToFileTime(&SystemTime, &CurTime); + } SystemTime.wYear = 1970; SystemTime.wMonth = 1; |