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 *****************************************************************/
25 RtlQueryTimeZoneInformation(PTIME_ZONE_INFORMATION TimeZoneInformation)
28 RTL_QUERY_REGISTRY_TABLE QueryTable[8];
29 UNICODE_STRING StandardName;
30 UNICODE_STRING DaylightName;
33 DPRINT("RtlQueryTimeZoneInformation()\n");
35 Status = RtlpGetRegistryHandle(RTL_REGISTRY_CONTROL,
36 L"TimeZoneInformation",
39 if (!NT_SUCCESS(Status))
41 DPRINT("RtlpGetRegistryHandle failed (Status %x)\n", Status);
45 RtlZeroMemory(QueryTable,
48 StandardName.Length = 0;
49 StandardName.MaximumLength = 32 * sizeof(WCHAR);
50 StandardName.Buffer = TimeZoneInformation->StandardName;
52 DaylightName.Length = 0;
53 DaylightName.MaximumLength = 32 * sizeof(WCHAR);
54 DaylightName.Buffer = TimeZoneInformation->DaylightName;
56 QueryTable[0].Name = L"Bias";
57 QueryTable[0].Flags = RTL_QUERY_REGISTRY_DIRECT;
58 QueryTable[0].EntryContext = &TimeZoneInformation->Bias;
60 QueryTable[1].Name = L"Standard Name";
61 QueryTable[1].Flags = RTL_QUERY_REGISTRY_DIRECT;
62 QueryTable[1].EntryContext = &StandardName;
64 QueryTable[2].Name = L"Standard Bias";
65 QueryTable[2].Flags = RTL_QUERY_REGISTRY_DIRECT;
66 QueryTable[2].EntryContext = &TimeZoneInformation->StandardBias;
68 QueryTable[3].Name = L"Standard Start";
69 QueryTable[3].Flags = RTL_QUERY_REGISTRY_DIRECT;
70 QueryTable[3].EntryContext = &TimeZoneInformation->StandardDate;
72 QueryTable[4].Name = L"Daylight Name";
73 QueryTable[4].Flags = RTL_QUERY_REGISTRY_DIRECT;
74 QueryTable[4].EntryContext = &DaylightName;
76 QueryTable[5].Name = L"Daylight Bias";
77 QueryTable[5].Flags = RTL_QUERY_REGISTRY_DIRECT;
78 QueryTable[5].EntryContext = &TimeZoneInformation->DaylightBias;
80 QueryTable[6].Name = L"Daylight Start";
81 QueryTable[6].Flags = RTL_QUERY_REGISTRY_DIRECT;
82 QueryTable[6].EntryContext = &TimeZoneInformation->DaylightDate;
84 Status = RtlQueryRegistryValues(RTL_REGISTRY_HANDLE,
96 RtlSetTimeZoneInformation(PTIME_ZONE_INFORMATION TimeZoneInformation)
102 DPRINT("RtlSetTimeZoneInformation()\n");
104 Status = RtlpGetRegistryHandle(RTL_REGISTRY_CONTROL,
105 L"TimeZoneInformation",
108 if (!NT_SUCCESS(Status))
110 DPRINT("RtlpGetRegistryHandle failed (Status %x)\n", Status);
114 Status = RtlWriteRegistryValue(RTL_REGISTRY_HANDLE,
118 &TimeZoneInformation->Bias,
120 if (!NT_SUCCESS(Status))
126 Length = (wcslen(TimeZoneInformation->StandardName) + 1) * sizeof(WCHAR);
127 Status = RtlWriteRegistryValue(RTL_REGISTRY_HANDLE,
131 TimeZoneInformation->StandardName,
133 if (!NT_SUCCESS(Status))
139 Status = RtlWriteRegistryValue(RTL_REGISTRY_HANDLE,
143 &TimeZoneInformation->StandardBias,
145 if (!NT_SUCCESS(Status))
151 Status = RtlWriteRegistryValue(RTL_REGISTRY_HANDLE,
155 &TimeZoneInformation->StandardDate,
157 if (!NT_SUCCESS(Status))
163 Length = (wcslen(TimeZoneInformation->DaylightName) + 1) * sizeof(WCHAR);
164 Status = RtlWriteRegistryValue(RTL_REGISTRY_HANDLE,
168 TimeZoneInformation->DaylightName,
170 if (!NT_SUCCESS(Status))
176 Status = RtlWriteRegistryValue(RTL_REGISTRY_HANDLE,
180 &TimeZoneInformation->DaylightBias,
182 if (!NT_SUCCESS(Status))
188 Status = RtlWriteRegistryValue(RTL_REGISTRY_HANDLE,
192 &TimeZoneInformation->DaylightDate,