Added a few more large integer functions.

diff --git a/dlls/kernel/time.c b/dlls/kernel/time.c
index dcd0cb2..d7e39c6 100644
--- a/dlls/kernel/time.c
+++ b/dlls/kernel/time.c
@@ -214,26 +214,11 @@
  *          1) Divided by CLK_TCK
  *          2) Time is relative. There is no 'starting date', so there is 
  *             no need in offset correction, like in UnixTimeToFileTime
- *      FIXME: This function should be moved to a more appropriate .c file
- *      FIXME: On floating point operations, it is assumed that
- *             floating values are truncated on conversion to integer.
  */
 static void TIME_ClockTimeToFileTime(clock_t unix_time, LPFILETIME filetime)
 {
-    double td = (unix_time*10000000.0)/CLK_TCK;
-    /* Yes, double, because long int might overflow here. */
-#if SIZEOF_LONG_LONG >= 8
-    unsigned long long t = td;
-    filetime->dwLowDateTime  = (UINT) t;
-    filetime->dwHighDateTime = (UINT) (t >> 32);
-#else
-    double divider = 1. * (1 << 16) * (1 << 16);
-    filetime->dwHighDateTime = (UINT) (td / divider);
-    filetime->dwLowDateTime  = (UINT) (td - filetime->dwHighDateTime*divider);
-    /* using floor() produces wierd results, better leave this as it is 
-     * ( with (UINT32) convertion )
-     */
-#endif
+    LONGLONG secs = RtlEnlargedUnsignedMultiply( unix_time, 10000000 );
+    ((LARGE_INTEGER *)filetime)->QuadPart = RtlExtendedLargeIntegerDivide( secs, CLK_TCK, NULL );
 }
 
 /*********************************************************************