Module: wine Branch: master Commit: 40fb7ca168c92174a5aa22a8a9b64231fecbeb65 URL: http://source.winehq.org/git/wine.git/?a=commit;h=40fb7ca168c92174a5aa22a8a9...
Author: Alexandre Julliard julliard@winehq.org Date: Wed Jul 11 14:04:54 2007 +0200
kernel32: Implemented GetTickCount64.
---
dlls/kernel32/kernel32.spec | 1 + dlls/kernel32/kernel_main.c | 20 +++++++++++++++++++- include/winbase.h | 1 + 3 files changed, 21 insertions(+), 1 deletions(-)
diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec index 32bf8e3..d30ec36 100644 --- a/dlls/kernel32/kernel32.spec +++ b/dlls/kernel32/kernel32.spec @@ -636,6 +636,7 @@ @ stdcall GetThreadSelectorEntry(long long ptr) @ stdcall GetThreadTimes(long ptr ptr ptr ptr) @ stdcall GetTickCount() +@ stdcall -ret64 GetTickCount64() @ stdcall GetTimeFormatA(long long ptr str ptr long) @ stdcall GetTimeFormatW(long long ptr wstr ptr long) @ stdcall GetTimeZoneInformation(ptr) diff --git a/dlls/kernel32/kernel_main.c b/dlls/kernel32/kernel_main.c index 5e72cee..846f787 100644 --- a/dlls/kernel32/kernel_main.c +++ b/dlls/kernel32/kernel_main.c @@ -46,6 +46,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(process);
extern int __wine_set_signal_handler(unsigned, int (*)(unsigned));
+static ULONGLONG server_start_time; + /*********************************************************************** * KERNEL thread initialisation routine */ @@ -112,12 +114,16 @@ static void set_entry_point( HMODULE module, const char *name, DWORD rva ) static BOOL process_attach( HMODULE module ) { SYSTEM_INFO si; + SYSTEM_TIMEOFDAY_INFORMATION ti; RTL_USER_PROCESS_PARAMETERS *params = NtCurrentTeb()->Peb->ProcessParameters;
/* FIXME: should probably be done in ntdll */ GetSystemInfo( &si ); NtCurrentTeb()->Peb->NumberOfProcessors = si.dwNumberOfProcessors;
+ NtQuerySystemInformation( SystemTimeOfDayInformation, &ti, sizeof(ti), NULL ); + server_start_time = ti.liKeBootTime.QuadPart; + /* Setup registry locale information */ LOCALE_InitRegistry();
@@ -236,6 +242,18 @@ INT WINAPI MulDiv( INT nMultiplicand, INT nMultiplier, INT nDivisor) }
+/****************************************************************************** + * GetTickCount64 (KERNEL32.@) + */ +ULONGLONG WINAPI GetTickCount64(void) +{ + LARGE_INTEGER now; + + NtQuerySystemTime( &now ); + return (now.QuadPart - server_start_time) / 10000; +} + + /*********************************************************************** * GetTickCount (KERNEL32.@) * @@ -254,5 +272,5 @@ INT WINAPI MulDiv( INT nMultiplicand, INT nMultiplier, INT nDivisor) */ DWORD WINAPI GetTickCount(void) { - return NtGetTickCount(); + return GetTickCount64(); } diff --git a/include/winbase.h b/include/winbase.h index 26691bb..af6a38c 100644 --- a/include/winbase.h +++ b/include/winbase.h @@ -1679,6 +1679,7 @@ DWORD WINAPI GetTempPathA(DWORD,LPSTR); DWORD WINAPI GetTempPathW(DWORD,LPWSTR); #define GetTempPath WINELIB_NAME_AW(GetTempPath) DWORD WINAPI GetTickCount(void); +ULONGLONG WINAPI GetTickCount64(void); DWORD WINAPI GetTimeZoneInformation(LPTIME_ZONE_INFORMATION); BOOL WINAPI GetThreadContext(HANDLE,CONTEXT *); INT WINAPI GetThreadPriority(HANDLE);