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 ***************************************************************/
23 RtlQueryTimeZoneInformation(PRTL_TIME_ZONE_INFORMATION TimeZoneInformation
)
25 RTL_QUERY_REGISTRY_TABLE QueryTable
[8];
26 UNICODE_STRING StandardName
;
27 UNICODE_STRING DaylightName
;
30 DPRINT("RtlQueryTimeZoneInformation()\n");
34 RtlZeroMemory(QueryTable
,
37 StandardName
.Length
= 0;
38 StandardName
.MaximumLength
= 32 * sizeof(WCHAR
);
39 StandardName
.Buffer
= TimeZoneInformation
->StandardName
;
41 DaylightName
.Length
= 0;
42 DaylightName
.MaximumLength
= 32 * sizeof(WCHAR
);
43 DaylightName
.Buffer
= TimeZoneInformation
->DaylightName
;
45 QueryTable
[0].Name
= L
"Bias";
46 QueryTable
[0].Flags
= RTL_QUERY_REGISTRY_DIRECT
;
47 QueryTable
[0].EntryContext
= &TimeZoneInformation
->Bias
;
49 QueryTable
[1].Name
= L
"StandardName";
50 QueryTable
[1].Flags
= RTL_QUERY_REGISTRY_DIRECT
;
51 QueryTable
[1].EntryContext
= &StandardName
;
53 QueryTable
[2].Name
= L
"StandardBias";
54 QueryTable
[2].Flags
= RTL_QUERY_REGISTRY_DIRECT
;
55 QueryTable
[2].EntryContext
= &TimeZoneInformation
->StandardBias
;
57 QueryTable
[3].Name
= L
"StandardStart";
58 QueryTable
[3].Flags
= RTL_QUERY_REGISTRY_DIRECT
;
59 QueryTable
[3].EntryContext
= &TimeZoneInformation
->StandardDate
;
61 QueryTable
[4].Name
= L
"DaylightName";
62 QueryTable
[4].Flags
= RTL_QUERY_REGISTRY_DIRECT
;
63 QueryTable
[4].EntryContext
= &DaylightName
;
65 QueryTable
[5].Name
= L
"DaylightBias";
66 QueryTable
[5].Flags
= RTL_QUERY_REGISTRY_DIRECT
;
67 QueryTable
[5].EntryContext
= &TimeZoneInformation
->DaylightBias
;
69 QueryTable
[6].Name
= L
"DaylightStart";
70 QueryTable
[6].Flags
= RTL_QUERY_REGISTRY_DIRECT
;
71 QueryTable
[6].EntryContext
= &TimeZoneInformation
->DaylightDate
;
73 Status
= RtlQueryRegistryValues(RTL_REGISTRY_CONTROL
,
74 L
"TimeZoneInformation",
88 RtlSetTimeZoneInformation(PRTL_TIME_ZONE_INFORMATION TimeZoneInformation
)
93 DPRINT("RtlSetTimeZoneInformation()\n");
97 Status
= RtlWriteRegistryValue(RTL_REGISTRY_CONTROL
,
98 L
"TimeZoneInformation",
101 &TimeZoneInformation
->Bias
,
103 if (!NT_SUCCESS(Status
))
108 Length
= (wcslen(TimeZoneInformation
->StandardName
) + 1) * sizeof(WCHAR
);
109 Status
= RtlWriteRegistryValue(RTL_REGISTRY_CONTROL
,
110 L
"TimeZoneInformation",
113 TimeZoneInformation
->StandardName
,
115 if (!NT_SUCCESS(Status
))
120 Status
= RtlWriteRegistryValue(RTL_REGISTRY_CONTROL
,
121 L
"TimeZoneInformation",
124 &TimeZoneInformation
->StandardBias
,
126 if (!NT_SUCCESS(Status
))
131 Status
= RtlWriteRegistryValue(RTL_REGISTRY_CONTROL
,
132 L
"TimeZoneInformation",
135 &TimeZoneInformation
->StandardDate
,
137 if (!NT_SUCCESS(Status
))
142 Length
= (wcslen(TimeZoneInformation
->DaylightName
) + 1) * sizeof(WCHAR
);
143 Status
= RtlWriteRegistryValue(RTL_REGISTRY_CONTROL
,
144 L
"TimeZoneInformation",
147 TimeZoneInformation
->DaylightName
,
149 if (!NT_SUCCESS(Status
))
154 Status
= RtlWriteRegistryValue(RTL_REGISTRY_CONTROL
,
155 L
"TimeZoneInformation",
158 &TimeZoneInformation
->DaylightBias
,
160 if (!NT_SUCCESS(Status
))
165 Status
= RtlWriteRegistryValue(RTL_REGISTRY_CONTROL
,
166 L
"TimeZoneInformation",
169 &TimeZoneInformation
->DaylightDate
,