3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS kernel
5 * PURPOSE: Timezone functions
6 * FILE: ntoskrnl/rtl/timezone.c
12 /* INCLUDES *****************************************************************/
14 #include <ddk/ntddk.h>
15 #include <internal/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,