1 /* $Id: time.c,v 1.22 2004/11/05 11:46:02 ekohl 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 *****************************************************************/
15 #include <internal/debug.h>
18 #define TICKSPERMINUTE 600000000
20 /* GLOBALS ******************************************************************/
22 /* Note: Bias[minutes] = UTC - local time */
23 TIME_ZONE_INFORMATION _SystemTimeZoneInfo
;
26 /* FUNCTIONS ****************************************************************/
29 ExInitTimeZoneInfo (VOID
)
31 /* Initialize system time zone information */
32 memset (& _SystemTimeZoneInfo
, 0, sizeof(TIME_ZONE_INFORMATION
));
34 /* FIXME: Read time zone information from the registry */
40 NtSetSystemTime(IN PLARGE_INTEGER UnsafeNewSystemTime
,
41 OUT PLARGE_INTEGER UnsafeOldSystemTime OPTIONAL
)
43 * FUNCTION: Sets the system time.
45 * NewTime - Points to a variable that specified the new time
46 * of day in the standard time format.
47 * OldTime - Optionally points to a variable that receives the
48 * old time of day in the standard time format.
53 LARGE_INTEGER OldSystemTime
;
54 LARGE_INTEGER NewSystemTime
;
55 TIME_FIELDS TimeFields
;
57 /* FIXME: Check for SeSystemTimePrivilege */
59 if (UnsafeNewSystemTime
== NULL
)
61 /* FIXME: update time zone settings */
63 return STATUS_SUCCESS
;
66 Status
= MmCopyFromCaller(&NewSystemTime
, UnsafeNewSystemTime
,
67 sizeof(NewSystemTime
));
68 if (!NT_SUCCESS(Status
))
73 if (UnsafeOldSystemTime
!= NULL
)
75 KeQuerySystemTime(&OldSystemTime
);
77 RtlTimeToTimeFields (&NewSystemTime
, &TimeFields
);
78 HalSetRealTimeClock (&TimeFields
);
80 if (UnsafeOldSystemTime
!= NULL
)
82 Status
= MmCopyToCaller(UnsafeOldSystemTime
, &OldSystemTime
,
83 sizeof(OldSystemTime
));
84 if (!NT_SUCCESS(Status
))
89 return(STATUS_SUCCESS
);
94 NtQuerySystemTime (OUT PLARGE_INTEGER UnsafeCurrentTime
)
96 * FUNCTION: Retrieves the system time.
98 * CurrentTime - Points to a variable that receives the current
99 * time of day in the standard time format.
102 LARGE_INTEGER CurrentTime
;
105 KeQuerySystemTime(&CurrentTime
);
106 Status
= MmCopyToCaller(UnsafeCurrentTime
, &CurrentTime
,
107 sizeof(CurrentTime
));
108 if (!NT_SUCCESS(Status
))
112 return STATUS_SUCCESS
;
121 ExLocalTimeToSystemTime (
122 PLARGE_INTEGER LocalTime
,
123 PLARGE_INTEGER SystemTime
126 SystemTime
->QuadPart
= LocalTime
->QuadPart
+
127 _SystemTimeZoneInfo
.Bias
* TICKSPERMINUTE
;
135 ExSetTimerResolution (
136 IN ULONG DesiredTime
,
137 IN BOOLEAN SetResolution
148 ExSystemTimeToLocalTime (
149 PLARGE_INTEGER SystemTime
,
150 PLARGE_INTEGER LocalTime
153 LocalTime
->QuadPart
= SystemTime
->QuadPart
-
154 _SystemTimeZoneInfo
.Bias
* TICKSPERMINUTE
;