1 /* $Id: timezone.c,v 1.5 2003/07/11 13:50:23 royce Exp $
3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS kernel
5 * PURPOSE: Timezone functions
6 * FILE: lib/ntdll/rtl/timezone.c
12 /* INCLUDES *****************************************************************/
14 #include <ddk/ntddk.h>
15 #include <ntos/registry.h>
16 #include <ntos/time.h>
19 #include <ntdll/ntdll.h>
22 /* FUNCTIONS *****************************************************************/
28 RtlQueryTimeZoneInformation(PTIME_ZONE_INFORMATION TimeZoneInformation
)
31 RTL_QUERY_REGISTRY_TABLE QueryTable
[8];
32 UNICODE_STRING StandardName
;
33 UNICODE_STRING DaylightName
;
36 DPRINT("RtlQueryTimeZoneInformation()\n");
38 Status
= RtlpGetRegistryHandle(RTL_REGISTRY_CONTROL
,
39 L
"TimeZoneInformation",
42 if (!NT_SUCCESS(Status
))
44 DPRINT("RtlpGetRegistryHandle failed (Status %x)\n", Status
);
48 RtlZeroMemory(QueryTable
,
51 StandardName
.Length
= 0;
52 StandardName
.MaximumLength
= 32 * sizeof(WCHAR
);
53 StandardName
.Buffer
= TimeZoneInformation
->StandardName
;
55 DaylightName
.Length
= 0;
56 DaylightName
.MaximumLength
= 32 * sizeof(WCHAR
);
57 DaylightName
.Buffer
= TimeZoneInformation
->DaylightName
;
59 QueryTable
[0].Name
= L
"Bias";
60 QueryTable
[0].Flags
= RTL_QUERY_REGISTRY_DIRECT
;
61 QueryTable
[0].EntryContext
= &TimeZoneInformation
->Bias
;
63 QueryTable
[1].Name
= L
"Standard Name";
64 QueryTable
[1].Flags
= RTL_QUERY_REGISTRY_DIRECT
;
65 QueryTable
[1].EntryContext
= &StandardName
;
67 QueryTable
[2].Name
= L
"Standard Bias";
68 QueryTable
[2].Flags
= RTL_QUERY_REGISTRY_DIRECT
;
69 QueryTable
[2].EntryContext
= &TimeZoneInformation
->StandardBias
;
71 QueryTable
[3].Name
= L
"Standard Start";
72 QueryTable
[3].Flags
= RTL_QUERY_REGISTRY_DIRECT
;
73 QueryTable
[3].EntryContext
= &TimeZoneInformation
->StandardDate
;
75 QueryTable
[4].Name
= L
"Daylight Name";
76 QueryTable
[4].Flags
= RTL_QUERY_REGISTRY_DIRECT
;
77 QueryTable
[4].EntryContext
= &DaylightName
;
79 QueryTable
[5].Name
= L
"Daylight Bias";
80 QueryTable
[5].Flags
= RTL_QUERY_REGISTRY_DIRECT
;
81 QueryTable
[5].EntryContext
= &TimeZoneInformation
->DaylightBias
;
83 QueryTable
[6].Name
= L
"Daylight Start";
84 QueryTable
[6].Flags
= RTL_QUERY_REGISTRY_DIRECT
;
85 QueryTable
[6].EntryContext
= &TimeZoneInformation
->DaylightDate
;
87 Status
= RtlQueryRegistryValues(RTL_REGISTRY_HANDLE
,
102 RtlSetTimeZoneInformation(PTIME_ZONE_INFORMATION TimeZoneInformation
)
108 DPRINT("RtlSetTimeZoneInformation()\n");
110 Status
= RtlpGetRegistryHandle(RTL_REGISTRY_CONTROL
,
111 L
"TimeZoneInformation",
114 if (!NT_SUCCESS(Status
))
116 DPRINT("RtlpGetRegistryHandle failed (Status %x)\n", Status
);
120 Status
= RtlWriteRegistryValue(RTL_REGISTRY_HANDLE
,
124 &TimeZoneInformation
->Bias
,
126 if (!NT_SUCCESS(Status
))
132 Length
= (wcslen(TimeZoneInformation
->StandardName
) + 1) * sizeof(WCHAR
);
133 Status
= RtlWriteRegistryValue(RTL_REGISTRY_HANDLE
,
137 TimeZoneInformation
->StandardName
,
139 if (!NT_SUCCESS(Status
))
145 Status
= RtlWriteRegistryValue(RTL_REGISTRY_HANDLE
,
149 &TimeZoneInformation
->StandardBias
,
151 if (!NT_SUCCESS(Status
))
157 Status
= RtlWriteRegistryValue(RTL_REGISTRY_HANDLE
,
161 &TimeZoneInformation
->StandardDate
,
163 if (!NT_SUCCESS(Status
))
169 Length
= (wcslen(TimeZoneInformation
->DaylightName
) + 1) * sizeof(WCHAR
);
170 Status
= RtlWriteRegistryValue(RTL_REGISTRY_HANDLE
,
174 TimeZoneInformation
->DaylightName
,
176 if (!NT_SUCCESS(Status
))
182 Status
= RtlWriteRegistryValue(RTL_REGISTRY_HANDLE
,
186 &TimeZoneInformation
->DaylightBias
,
188 if (!NT_SUCCESS(Status
))
194 Status
= RtlWriteRegistryValue(RTL_REGISTRY_HANDLE
,
198 &TimeZoneInformation
->DaylightDate
,