in src/win32/dt_win32.c [387:422]
static int getTZIfromRegistry(char *tszSubkey, char *tszKey, DYNAMIC_TIME_ZONE_INFORMATION *ptzi, const char szStandardName[])
{
HKEY hkey_tz = NULL;
DWORD dw = 0;
REG_TZI_FORMAT regtzi = {0,};
if (ERROR_SUCCESS != (dw = RegOpenKeyA(HKEY_LOCAL_MACHINE, tszSubkey, &hkey_tz))) {
RegCloseKey(hkey_tz);
free(tszSubkey);
return EXIT_FAILURE;
}
GetTziFromKey(tszSubkey, tszKey, ®tzi);
dw = sizeof(ptzi->StandardName);
if (ERROR_SUCCESS != (dw = RegQueryValueExW(hkey_tz, REG_STD, NULL, NULL, (LPBYTE)&ptzi->StandardName, &dw))) {
RegCloseKey(hkey_tz);
free(tszSubkey);
return EXIT_FAILURE;
}
dw = sizeof(ptzi->StandardName);
if (ERROR_SUCCESS != (dw = RegQueryValueExW(hkey_tz, REG_DLT, NULL, NULL, (LPBYTE)&ptzi->DaylightName, &dw))) {
RegCloseKey(hkey_tz);
free(tszSubkey);
return EXIT_FAILURE;
}
RegTziToDynamicTimeZoneInfo(®tzi, ptzi);
MultiByteToWideChar(CP_ACP, MB_COMPOSITE, szStandardName, -1 , ptzi->TimeZoneKeyName, sizeof(ptzi->TimeZoneKeyName));
RegCloseKey(hkey_tz);
return EXIT_SUCCESS;
}