Alexandre Julliard : kernel32: Implemented GetTickCount64.

Alexandre Julliard julliard at wine.codeweavers.com
Wed Jul 11 07:50:59 CDT 2007


Module: wine
Branch: master
Commit: 40fb7ca168c92174a5aa22a8a9b64231fecbeb65
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=40fb7ca168c92174a5aa22a8a9b64231fecbeb65

Author: Alexandre Julliard <julliard at 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);




More information about the wine-cvs mailing list