2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS system libraries
4 * PURPOSE: Timezone functions
5 * FILE: lib/rtl/timezone.c
9 /* INCLUDES *****************************************************************/
16 /* FUNCTIONS ***************************************************************/
22 RtlQueryTimeZoneInformation(PRTL_TIME_ZONE_INFORMATION TimeZoneInformation
)
24 RTL_QUERY_REGISTRY_TABLE QueryTable
[8];
25 UNICODE_STRING StandardName
;
26 UNICODE_STRING DaylightName
;
29 DPRINT("RtlQueryTimeZoneInformation()\n");
33 RtlZeroMemory(QueryTable
,
36 StandardName
.Length
= 0;
37 StandardName
.MaximumLength
= 32 * sizeof(WCHAR
);
38 StandardName
.Buffer
= TimeZoneInformation
->StandardName
;
40 DaylightName
.Length
= 0;
41 DaylightName
.MaximumLength
= 32 * sizeof(WCHAR
);
42 DaylightName
.Buffer
= TimeZoneInformation
->DaylightName
;
44 QueryTable
[0].Name
= L
"Bias";
45 QueryTable
[0].Flags
= RTL_QUERY_REGISTRY_DIRECT
;
46 QueryTable
[0].EntryContext
= &TimeZoneInformation
->Bias
;
48 QueryTable
[1].Name
= L
"Standard Name";
49 QueryTable
[1].Flags
= RTL_QUERY_REGISTRY_DIRECT
;
50 QueryTable
[1].EntryContext
= &StandardName
;
52 QueryTable
[2].Name
= L
"Standard Bias";
53 QueryTable
[2].Flags
= RTL_QUERY_REGISTRY_DIRECT
;
54 QueryTable
[2].EntryContext
= &TimeZoneInformation
->StandardBias
;
56 QueryTable
[3].Name
= L
"Standard Start";
57 QueryTable
[3].Flags
= RTL_QUERY_REGISTRY_DIRECT
;
58 QueryTable
[3].EntryContext
= &TimeZoneInformation
->StandardDate
;
60 QueryTable
[4].Name
= L
"Daylight Name";
61 QueryTable
[4].Flags
= RTL_QUERY_REGISTRY_DIRECT
;
62 QueryTable
[4].EntryContext
= &DaylightName
;
64 QueryTable
[5].Name
= L
"Daylight Bias";
65 QueryTable
[5].Flags
= RTL_QUERY_REGISTRY_DIRECT
;
66 QueryTable
[5].EntryContext
= &TimeZoneInformation
->DaylightBias
;
68 QueryTable
[6].Name
= L
"Daylight Start";
69 QueryTable
[6].Flags
= RTL_QUERY_REGISTRY_DIRECT
;
70 QueryTable
[6].EntryContext
= &TimeZoneInformation
->DaylightDate
;
72 Status
= RtlQueryRegistryValues(RTL_REGISTRY_CONTROL
,
73 L
"TimeZoneInformation",
86 RtlSetTimeZoneInformation(PRTL_TIME_ZONE_INFORMATION TimeZoneInformation
)
91 DPRINT("RtlSetTimeZoneInformation()\n");
95 Status
= RtlWriteRegistryValue(RTL_REGISTRY_CONTROL
,
96 L
"TimeZoneInformation",
99 &TimeZoneInformation
->Bias
,
101 if (!NT_SUCCESS(Status
))
106 Length
= (wcslen(TimeZoneInformation
->StandardName
) + 1) * sizeof(WCHAR
);
107 Status
= RtlWriteRegistryValue(RTL_REGISTRY_CONTROL
,
108 L
"TimeZoneInformation",
111 TimeZoneInformation
->StandardName
,
113 if (!NT_SUCCESS(Status
))
118 Status
= RtlWriteRegistryValue(RTL_REGISTRY_CONTROL
,
119 L
"TimeZoneInformation",
122 &TimeZoneInformation
->StandardBias
,
124 if (!NT_SUCCESS(Status
))
129 Status
= RtlWriteRegistryValue(RTL_REGISTRY_CONTROL
,
130 L
"TimeZoneInformation",
133 &TimeZoneInformation
->StandardDate
,
135 if (!NT_SUCCESS(Status
))
140 Length
= (wcslen(TimeZoneInformation
->DaylightName
) + 1) * sizeof(WCHAR
);
141 Status
= RtlWriteRegistryValue(RTL_REGISTRY_CONTROL
,
142 L
"TimeZoneInformation",
145 TimeZoneInformation
->DaylightName
,
147 if (!NT_SUCCESS(Status
))
152 Status
= RtlWriteRegistryValue(RTL_REGISTRY_CONTROL
,
153 L
"TimeZoneInformation",
156 &TimeZoneInformation
->DaylightBias
,
158 if (!NT_SUCCESS(Status
))
163 Status
= RtlWriteRegistryValue(RTL_REGISTRY_CONTROL
,
164 L
"TimeZoneInformation",
167 &TimeZoneInformation
->DaylightDate
,