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