1 /* $Id: time.c,v 1.23 2004/11/05 17:42:20 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 ExpTimeZoneInfo
;
26 /* FUNCTIONS ****************************************************************/
29 ExpInitTimeZoneInfo(VOID
)
33 /* Read time zone information from the registry */
34 Status
= RtlQueryTimeZoneInformation(&ExpTimeZoneInfo
);
35 if (!NT_SUCCESS(Status
))
37 memset(&ExpTimeZoneInfo
, 0, sizeof(TIME_ZONE_INFORMATION
));
44 * FUNCTION: Sets the system time.
46 * NewTime - Points to a variable that specified the new time
47 * of day in the standard time format.
48 * OldTime - Optionally points to a variable that receives the
49 * old time of day in the standard time format.
53 NtSetSystemTime(IN PLARGE_INTEGER UnsafeNewSystemTime
,
54 OUT PLARGE_INTEGER UnsafeOldSystemTime OPTIONAL
)
57 LARGE_INTEGER OldSystemTime
;
58 LARGE_INTEGER NewSystemTime
;
59 TIME_FIELDS TimeFields
;
61 /* FIXME: Check for SeSystemTimePrivilege */
63 if (UnsafeNewSystemTime
== NULL
)
65 /* FIXME: update time zone settings */
67 return STATUS_SUCCESS
;
70 Status
= MmCopyFromCaller(&NewSystemTime
, UnsafeNewSystemTime
,
71 sizeof(NewSystemTime
));
72 if (!NT_SUCCESS(Status
))
77 if (UnsafeOldSystemTime
!= NULL
)
79 KeQuerySystemTime(&OldSystemTime
);
81 RtlTimeToTimeFields (&NewSystemTime
, &TimeFields
);
82 HalSetRealTimeClock (&TimeFields
);
84 if (UnsafeOldSystemTime
!= NULL
)
86 Status
= MmCopyToCaller(UnsafeOldSystemTime
, &OldSystemTime
,
87 sizeof(OldSystemTime
));
88 if (!NT_SUCCESS(Status
))
93 return(STATUS_SUCCESS
);
98 * FUNCTION: Retrieves the system time.
100 * CurrentTime - Points to a variable that receives the current
101 * time of day in the standard time format.
104 NtQuerySystemTime(OUT PLARGE_INTEGER UnsafeCurrentTime
)
106 LARGE_INTEGER CurrentTime
;
109 KeQuerySystemTime(&CurrentTime
);
110 Status
= MmCopyToCaller(UnsafeCurrentTime
, &CurrentTime
,
111 sizeof(CurrentTime
));
112 if (!NT_SUCCESS(Status
))
116 return STATUS_SUCCESS
;
125 ExLocalTimeToSystemTime (
126 PLARGE_INTEGER LocalTime
,
127 PLARGE_INTEGER SystemTime
130 SystemTime
->QuadPart
= LocalTime
->QuadPart
;
133 ExpTimeZoneInfo
.Bias
* TICKSPERMINUTE
;
143 ExSetTimerResolution (
144 IN ULONG DesiredTime
,
145 IN BOOLEAN SetResolution
157 ExSystemTimeToLocalTime (
158 PLARGE_INTEGER SystemTime
,
159 PLARGE_INTEGER LocalTime
162 LocalTime
->QuadPart
= SystemTime
->QuadPart
;
165 ExpTimeZoneInfo
.Bias
* TICKSPERMINUTE
;