mirror of
https://github.com/reactos/reactos.git
synced 2024-12-29 10:35:28 +00:00
[TIMEDATE] Avoid the use of DisplayWin32Error in time sync utility functions. CORE-13001
This commit is contained in:
parent
aa24ad7429
commit
1938b7484e
3 changed files with 60 additions and 36 deletions
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -95,7 +95,7 @@ ULONG GetServerTime(LPWSTR lpAddress);
|
||||||
|
|
||||||
|
|
||||||
/* w32time.c */
|
/* w32time.c */
|
||||||
VOID SyncTimeNow(VOID);
|
DWORD SyncTimeNow(VOID);
|
||||||
|
|
||||||
|
|
||||||
/* monthcal.c */
|
/* monthcal.c */
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue