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>
20 #include <ntdll/registry.h>
23 /* FUNCTIONS *****************************************************************/
29 RtlQueryTimeZoneInformation(PTIME_ZONE_INFORMATION TimeZoneInformation)
32 RTL_QUERY_REGISTRY_TABLE QueryTable[8];
33 UNICODE_STRING StandardName;
34 UNICODE_STRING DaylightName;
37 DPRINT("RtlQueryTimeZoneInformation()\n");
39 Status = RtlpGetRegistryHandle(RTL_REGISTRY_CONTROL,
40 L"TimeZoneInformation",
43 if (!NT_SUCCESS(Status))
45 DPRINT("RtlpGetRegistryHandle failed (Status %x)\n", Status);
49 RtlZeroMemory(QueryTable,
52 StandardName.Length = 0;
53 StandardName.MaximumLength = 32 * sizeof(WCHAR);
54 StandardName.Buffer = TimeZoneInformation->StandardName;
56 DaylightName.Length = 0;
57 DaylightName.MaximumLength = 32 * sizeof(WCHAR);
58 DaylightName.Buffer = TimeZoneInformation->DaylightName;
60 QueryTable[0].Name = L"Bias";
61 QueryTable[0].Flags = RTL_QUERY_REGISTRY_DIRECT;
62 QueryTable[0].EntryContext = &TimeZoneInformation->Bias;
64 QueryTable[1].Name = L"Standard Name";
65 QueryTable[1].Flags = RTL_QUERY_REGISTRY_DIRECT;
66 QueryTable[1].EntryContext = &StandardName;
68 QueryTable[2].Name = L"Standard Bias";
69 QueryTable[2].Flags = RTL_QUERY_REGISTRY_DIRECT;
70 QueryTable[2].EntryContext = &TimeZoneInformation->StandardBias;
72 QueryTable[3].Name = L"Standard Start";
73 QueryTable[3].Flags = RTL_QUERY_REGISTRY_DIRECT;
74 QueryTable[3].EntryContext = &TimeZoneInformation->StandardDate;
76 QueryTable[4].Name = L"Daylight Name";
77 QueryTable[4].Flags = RTL_QUERY_REGISTRY_DIRECT;
78 QueryTable[4].EntryContext = &DaylightName;
80 QueryTable[5].Name = L"Daylight Bias";
81 QueryTable[5].Flags = RTL_QUERY_REGISTRY_DIRECT;
82 QueryTable[5].EntryContext = &TimeZoneInformation->DaylightBias;
84 QueryTable[6].Name = L"Daylight Start";
85 QueryTable[6].Flags = RTL_QUERY_REGISTRY_DIRECT;
86 QueryTable[6].EntryContext = &TimeZoneInformation->DaylightDate;
88 Status = RtlQueryRegistryValues(RTL_REGISTRY_HANDLE,
103 RtlSetTimeZoneInformation(PTIME_ZONE_INFORMATION TimeZoneInformation)
109 DPRINT("RtlSetTimeZoneInformation()\n");
111 Status = RtlpGetRegistryHandle(RTL_REGISTRY_CONTROL,
112 L"TimeZoneInformation",
115 if (!NT_SUCCESS(Status))
117 DPRINT("RtlpGetRegistryHandle failed (Status %x)\n", Status);
121 Status = RtlWriteRegistryValue(RTL_REGISTRY_HANDLE,
125 &TimeZoneInformation->Bias,
127 if (!NT_SUCCESS(Status))
133 Length = (wcslen(TimeZoneInformation->StandardName) + 1) * sizeof(WCHAR);
134 Status = RtlWriteRegistryValue(RTL_REGISTRY_HANDLE,
138 TimeZoneInformation->StandardName,
140 if (!NT_SUCCESS(Status))
146 Status = RtlWriteRegistryValue(RTL_REGISTRY_HANDLE,
150 &TimeZoneInformation->StandardBias,
152 if (!NT_SUCCESS(Status))
158 Status = RtlWriteRegistryValue(RTL_REGISTRY_HANDLE,
162 &TimeZoneInformation->StandardDate,
164 if (!NT_SUCCESS(Status))
170 Length = (wcslen(TimeZoneInformation->DaylightName) + 1) * sizeof(WCHAR);
171 Status = RtlWriteRegistryValue(RTL_REGISTRY_HANDLE,
175 TimeZoneInformation->DaylightName,
177 if (!NT_SUCCESS(Status))
183 Status = RtlWriteRegistryValue(RTL_REGISTRY_HANDLE,
187 &TimeZoneInformation->DaylightBias,
189 if (!NT_SUCCESS(Status))
195 Status = RtlWriteRegistryValue(RTL_REGISTRY_HANDLE,
199 &TimeZoneInformation->DaylightDate,