1 /* $Id: time.c,v 1.20 2004/06/23 21:01:27 ion Exp $
3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS kernel
5 * FILE: ntoskrnl/ex/time.c
7 * PROGRAMMER: David Welch (welch@mcmail.com)
12 /* INCLUDES *****************************************************************/
14 #include <ddk/ntddk.h>
15 #include <internal/ex.h>
16 #include <internal/safe.h>
17 #include <ddk/halfuncs.h>
18 #include <ddk/kefuncs.h>
20 #include <internal/debug.h>
23 #define TICKSPERMINUTE 600000000
25 /* GLOBALS ******************************************************************/
27 /* Note: Bias[minutes] = UTC - local time */
28 TIME_ZONE_INFORMATION _SystemTimeZoneInfo
;
31 /* FUNCTIONS ****************************************************************/
34 ExInitTimeZoneInfo (VOID
)
36 /* Initialize system time zone information */
37 memset (& _SystemTimeZoneInfo
, 0, sizeof(TIME_ZONE_INFORMATION
));
39 /* FIXME: Read time zone information from the registry */
45 NtSetSystemTime (IN PLARGE_INTEGER UnsafeNewSystemTime
,
46 OUT PLARGE_INTEGER UnsafeOldSystemTime OPTIONAL
)
48 * FUNCTION: Sets the system time.
50 * NewTime - Points to a variable that specified the new time
51 * of day in the standard time format.
52 * OldTime - Optionally points to a variable that receives the
53 * old time of day in the standard time format.
58 LARGE_INTEGER OldSystemTime
;
59 LARGE_INTEGER NewSystemTime
;
60 TIME_FIELDS TimeFields
;
62 /* FIXME: Check for SeSystemTimePrivilege */
64 Status
= MmCopyFromCaller(&NewSystemTime
, UnsafeNewSystemTime
,
65 sizeof(NewSystemTime
));
66 if (!NT_SUCCESS(Status
))
71 if (UnsafeOldSystemTime
!= NULL
)
73 KeQuerySystemTime(&OldSystemTime
);
75 RtlTimeToTimeFields (&NewSystemTime
, &TimeFields
);
76 HalSetRealTimeClock (&TimeFields
);
78 if (UnsafeOldSystemTime
!= NULL
)
80 Status
= MmCopyToCaller(UnsafeOldSystemTime
, &OldSystemTime
,
81 sizeof(OldSystemTime
));
82 if (!NT_SUCCESS(Status
))
87 return(STATUS_SUCCESS
);
92 NtQuerySystemTime (OUT PLARGE_INTEGER UnsafeCurrentTime
)
94 * FUNCTION: Retrieves the system time.
96 * CurrentTime - Points to a variable that receives the current
97 * time of day in the standard time format.
100 LARGE_INTEGER CurrentTime
;
103 KeQuerySystemTime(&CurrentTime
);
104 Status
= MmCopyToCaller(UnsafeCurrentTime
, &CurrentTime
,
105 sizeof(CurrentTime
));
106 if (!NT_SUCCESS(Status
))
110 return STATUS_SUCCESS
;
119 ExLocalTimeToSystemTime (
120 PLARGE_INTEGER LocalTime
,
121 PLARGE_INTEGER SystemTime
124 SystemTime
->QuadPart
= LocalTime
->QuadPart
+
125 _SystemTimeZoneInfo
.Bias
* TICKSPERMINUTE
;
133 ExSetTimerResolution (
134 IN ULONG DesiredTime
,
135 IN BOOLEAN SetResolution
146 ExSystemTimeToLocalTime (
147 PLARGE_INTEGER SystemTime
,
148 PLARGE_INTEGER LocalTime
151 LocalTime
->QuadPart
= SystemTime
->QuadPart
-
152 _SystemTimeZoneInfo
.Bias
* TICKSPERMINUTE
;