Reactos
at master 175 lines 5.6 kB view raw
1/* 2 * COPYRIGHT: See COPYING in the top level directory 3 * PROJECT: ReactOS system libraries 4 * PURPOSE: Timezone functions 5 * FILE: lib/rtl/timezone.c 6 * PROGRAMER: Eric Kohl 7 */ 8 9/* INCLUDES *****************************************************************/ 10 11#include <rtl.h> 12 13#define NDEBUG 14#include <debug.h> 15 16/* FUNCTIONS ***************************************************************/ 17 18/* 19 * @implemented 20 */ 21NTSTATUS 22NTAPI 23RtlQueryTimeZoneInformation(PRTL_TIME_ZONE_INFORMATION TimeZoneInformation) 24{ 25 RTL_QUERY_REGISTRY_TABLE QueryTable[8]; 26 UNICODE_STRING StandardName; 27 UNICODE_STRING DaylightName; 28 NTSTATUS Status; 29 30 DPRINT("RtlQueryTimeZoneInformation()\n"); 31 32 PAGED_CODE_RTL(); 33 34 RtlZeroMemory(QueryTable, 35 sizeof(QueryTable)); 36 37 StandardName.Length = 0; 38 StandardName.MaximumLength = 32 * sizeof(WCHAR); 39 StandardName.Buffer = TimeZoneInformation->StandardName; 40 41 DaylightName.Length = 0; 42 DaylightName.MaximumLength = 32 * sizeof(WCHAR); 43 DaylightName.Buffer = TimeZoneInformation->DaylightName; 44 45 QueryTable[0].Name = L"Bias"; 46 QueryTable[0].Flags = RTL_QUERY_REGISTRY_DIRECT; 47 QueryTable[0].EntryContext = &TimeZoneInformation->Bias; 48 49 QueryTable[1].Name = L"StandardName"; 50 QueryTable[1].Flags = RTL_QUERY_REGISTRY_DIRECT; 51 QueryTable[1].EntryContext = &StandardName; 52 53 QueryTable[2].Name = L"StandardBias"; 54 QueryTable[2].Flags = RTL_QUERY_REGISTRY_DIRECT; 55 QueryTable[2].EntryContext = &TimeZoneInformation->StandardBias; 56 57 QueryTable[3].Name = L"StandardStart"; 58 QueryTable[3].Flags = RTL_QUERY_REGISTRY_DIRECT; 59 QueryTable[3].EntryContext = &TimeZoneInformation->StandardDate; 60 61 QueryTable[4].Name = L"DaylightName"; 62 QueryTable[4].Flags = RTL_QUERY_REGISTRY_DIRECT; 63 QueryTable[4].EntryContext = &DaylightName; 64 65 QueryTable[5].Name = L"DaylightBias"; 66 QueryTable[5].Flags = RTL_QUERY_REGISTRY_DIRECT; 67 QueryTable[5].EntryContext = &TimeZoneInformation->DaylightBias; 68 69 QueryTable[6].Name = L"DaylightStart"; 70 QueryTable[6].Flags = RTL_QUERY_REGISTRY_DIRECT; 71 QueryTable[6].EntryContext = &TimeZoneInformation->DaylightDate; 72 73 Status = RtlQueryRegistryValues(RTL_REGISTRY_CONTROL, 74 L"TimeZoneInformation", 75 QueryTable, 76 NULL, 77 NULL); 78 79 return Status; 80} 81 82 83/* 84 * @implemented 85 */ 86NTSTATUS 87NTAPI 88RtlSetTimeZoneInformation(PRTL_TIME_ZONE_INFORMATION TimeZoneInformation) 89{ 90 SIZE_T Length; 91 NTSTATUS Status; 92 93 DPRINT("RtlSetTimeZoneInformation()\n"); 94 95 PAGED_CODE_RTL(); 96 97 Status = RtlWriteRegistryValue(RTL_REGISTRY_CONTROL, 98 L"TimeZoneInformation", 99 L"Bias", 100 REG_DWORD, 101 &TimeZoneInformation->Bias, 102 sizeof(LONG)); 103 if (!NT_SUCCESS(Status)) 104 { 105 return Status; 106 } 107 108 Length = (wcslen(TimeZoneInformation->StandardName) + 1) * sizeof(WCHAR); 109 Status = RtlWriteRegistryValue(RTL_REGISTRY_CONTROL, 110 L"TimeZoneInformation", 111 L"StandardName", 112 REG_SZ, 113 TimeZoneInformation->StandardName, 114 (ULONG)Length); 115 if (!NT_SUCCESS(Status)) 116 { 117 return Status; 118 } 119 120 Status = RtlWriteRegistryValue(RTL_REGISTRY_CONTROL, 121 L"TimeZoneInformation", 122 L"StandardBias", 123 REG_DWORD, 124 &TimeZoneInformation->StandardBias, 125 sizeof(LONG)); 126 if (!NT_SUCCESS(Status)) 127 { 128 return Status; 129 } 130 131 Status = RtlWriteRegistryValue(RTL_REGISTRY_CONTROL, 132 L"TimeZoneInformation", 133 L"StandardStart", 134 REG_BINARY, 135 &TimeZoneInformation->StandardDate, 136 sizeof(SYSTEMTIME)); 137 if (!NT_SUCCESS(Status)) 138 { 139 return Status; 140 } 141 142 Length = (wcslen(TimeZoneInformation->DaylightName) + 1) * sizeof(WCHAR); 143 Status = RtlWriteRegistryValue(RTL_REGISTRY_CONTROL, 144 L"TimeZoneInformation", 145 L"DaylightName", 146 REG_SZ, 147 TimeZoneInformation->DaylightName, 148 (ULONG)Length); 149 if (!NT_SUCCESS(Status)) 150 { 151 return Status; 152 } 153 154 Status = RtlWriteRegistryValue(RTL_REGISTRY_CONTROL, 155 L"TimeZoneInformation", 156 L"DaylightBias", 157 REG_DWORD, 158 &TimeZoneInformation->DaylightBias, 159 sizeof(LONG)); 160 if (!NT_SUCCESS(Status)) 161 { 162 return Status; 163 } 164 165 Status = RtlWriteRegistryValue(RTL_REGISTRY_CONTROL, 166 L"TimeZoneInformation", 167 L"DaylightStart", 168 REG_BINARY, 169 &TimeZoneInformation->DaylightDate, 170 sizeof(SYSTEMTIME)); 171 172 return Status; 173} 174 175/* EOF */