[TIMEDATE] Avoid the use of DisplayWin32Error in time sync utility functions. CORE-13001

This commit is contained in:
Thomas Faber 2018-06-03 15:35:42 +02:00
parent aa24ad7429
commit 1938b7484e
No known key found for this signature in database
GPG key ID: 076E7C3D44720826
3 changed files with 60 additions and 36 deletions

View file

@ -204,8 +204,15 @@ InetTimePageProc(HWND hwndDlg,
{ {
case IDC_UPDATEBUTTON: case IDC_UPDATEBUTTON:
{ {
DWORD dwError;
SetNTPServer(hwndDlg); SetNTPServer(hwndDlg);
SyncTimeNow();
dwError = SyncTimeNow();
if (dwError != ERROR_SUCCESS)
{
DisplayWin32Error(dwError);
}
} }
break; break;

View file

@ -95,7 +95,7 @@ ULONG GetServerTime(LPWSTR lpAddress);
/* w32time.c */ /* w32time.c */
VOID SyncTimeNow(VOID); DWORD SyncTimeNow(VOID);
/* monthcal.c */ /* monthcal.c */

View file

@ -8,7 +8,7 @@
#include "timedate.h" #include "timedate.h"
/* Get the domain name from the registry */ /* Get the domain name from the registry */
static BOOL static DWORD
GetNTPServerAddress(LPWSTR *lpAddress) GetNTPServerAddress(LPWSTR *lpAddress)
{ {
HKEY hKey; HKEY hKey;
@ -16,13 +16,16 @@ GetNTPServerAddress(LPWSTR *lpAddress)
DWORD dwSize; DWORD dwSize;
LONG lRet; LONG lRet;
*lpAddress = NULL;
hKey = NULL;
lRet = RegOpenKeyExW(HKEY_LOCAL_MACHINE, lRet = RegOpenKeyExW(HKEY_LOCAL_MACHINE,
L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\DateTime\\Servers", L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\DateTime\\Servers",
0, 0,
KEY_QUERY_VALUE, KEY_QUERY_VALUE,
&hKey); &hKey);
if (lRet != ERROR_SUCCESS) if (lRet != ERROR_SUCCESS)
goto fail; goto Exit;
/* Get data from default value */ /* Get data from default value */
dwSize = 4 * sizeof(WCHAR); dwSize = 4 * sizeof(WCHAR);
@ -33,7 +36,7 @@ GetNTPServerAddress(LPWSTR *lpAddress)
(LPBYTE)szSel, (LPBYTE)szSel,
&dwSize); &dwSize);
if (lRet != ERROR_SUCCESS) if (lRet != ERROR_SUCCESS)
goto fail; goto Exit;
dwSize = 0; dwSize = 0;
lRet = RegQueryValueExW(hKey, lRet = RegQueryValueExW(hKey,
@ -43,7 +46,7 @@ GetNTPServerAddress(LPWSTR *lpAddress)
NULL, NULL,
&dwSize); &dwSize);
if (lRet != ERROR_SUCCESS) if (lRet != ERROR_SUCCESS)
goto fail; goto Exit;
(*lpAddress) = (LPWSTR)HeapAlloc(GetProcessHeap(), (*lpAddress) = (LPWSTR)HeapAlloc(GetProcessHeap(),
0, 0,
@ -51,7 +54,7 @@ GetNTPServerAddress(LPWSTR *lpAddress)
if ((*lpAddress) == NULL) if ((*lpAddress) == NULL)
{ {
lRet = ERROR_NOT_ENOUGH_MEMORY; lRet = ERROR_NOT_ENOUGH_MEMORY;
goto fail; goto Exit;
} }
lRet = RegQueryValueExW(hKey, lRet = RegQueryValueExW(hKey,
@ -61,38 +64,42 @@ GetNTPServerAddress(LPWSTR *lpAddress)
(LPBYTE)*lpAddress, (LPBYTE)*lpAddress,
&dwSize); &dwSize);
if (lRet != ERROR_SUCCESS) if (lRet != ERROR_SUCCESS)
goto fail; goto Exit;
RegCloseKey(hKey); Exit:
return TRUE;
fail:
DisplayWin32Error(lRet);
if (hKey) if (hKey)
RegCloseKey(hKey); RegCloseKey(hKey);
HeapFree(GetProcessHeap(), 0, *lpAddress); if (lRet != ERROR_SUCCESS)
return FALSE; HeapFree(GetProcessHeap(), 0, *lpAddress);
return lRet;
} }
/* Request the time from the current NTP server */ /* Request the time from the current NTP server */
static ULONG static DWORD
GetTimeFromServer(VOID) GetTimeFromServer(PULONG pulTime)
{ {
LPWSTR lpAddress = NULL; LPWSTR lpAddress;
ULONG ulTime = 0; DWORD dwError;
if (GetNTPServerAddress(&lpAddress)) dwError = GetNTPServerAddress(&lpAddress);
if (dwError != ERROR_SUCCESS)
{ {
ulTime = GetServerTime(lpAddress); return dwError;
HeapFree(GetProcessHeap(),
0,
lpAddress);
} }
return ulTime; *pulTime = GetServerTime(lpAddress);
if (*pulTime == 0)
{
dwError = ERROR_GEN_FAILURE;
}
HeapFree(GetProcessHeap(),
0,
lpAddress);
return dwError;
} }
@ -158,7 +165,7 @@ SystemSetTime(LPSYSTEMTIME lpSystemTime)
* 1st Jan, 1900. The time returned from the server * 1st Jan, 1900. The time returned from the server
* needs adding to that date to get the current Gregorian time * needs adding to that date to get the current Gregorian time
*/ */
static VOID static DWORD
UpdateSystemTime(ULONG ulTime) UpdateSystemTime(ULONG ulTime)
{ {
FILETIME ftNew; FILETIME ftNew;
@ -177,8 +184,7 @@ UpdateSystemTime(ULONG ulTime)
/* Convert to a file time */ /* Convert to a file time */
if (!SystemTimeToFileTime(&stNew, &ftNew)) if (!SystemTimeToFileTime(&stNew, &ftNew))
{ {
DisplayWin32Error(GetLastError()); return GetLastError();
return;
} }
/* Add on the time passed since 1st Jan 1900 */ /* Add on the time passed since 1st Jan 1900 */
@ -189,23 +195,34 @@ UpdateSystemTime(ULONG ulTime)
/* Convert back to a system time */ /* Convert back to a system time */
if (!FileTimeToSystemTime(&ftNew, &stNew)) if (!FileTimeToSystemTime(&ftNew, &stNew))
{ {
DisplayWin32Error(GetLastError()); return GetLastError();
return;
} }
if (!SystemSetTime(&stNew)) if (!SystemSetTime(&stNew))
{ {
DisplayWin32Error(GetLastError()); return GetLastError();
} }
return ERROR_SUCCESS;
} }
VOID DWORD
SyncTimeNow(VOID) SyncTimeNow(VOID)
{ {
DWORD dwError;
ULONG ulTime; ULONG ulTime;
ulTime = GetTimeFromServer(); dwError = GetTimeFromServer(&ulTime);
if (dwError != ERROR_SUCCESS)
{
return dwError;
}
if (ulTime != 0) if (ulTime != 0)
UpdateSystemTime(ulTime); {
dwError = UpdateSystemTime(ulTime);
}
return dwError;
} }