enable the SeSystemtimePrivilege privilege which is required to call SetLocalTime
Modified: trunk/reactos/lib/syssetup/wizard.c

Modified: trunk/reactos/lib/syssetup/wizard.c
--- trunk/reactos/lib/syssetup/wizard.c	2005-01-25 23:50:22 UTC (rev 13299)
+++ trunk/reactos/lib/syssetup/wizard.c	2005-01-25 23:57:57 UTC (rev 13300)
@@ -1121,6 +1121,62 @@
 }
 
 
+static BOOL
+SetSystemLocalTime(HWND hwnd, PSETUPDATA SetupData)
+{
+  HANDLE hToken;
+  TOKEN_PRIVILEGES priv, previouspriv;
+  BOOL Ret = FALSE;
+  
+  /*
+   * enable the SeSystemtimePrivilege privilege
+   */
+  
+  if(OpenProcessToken(GetCurrentProcess(),
+                      TOKEN_ADJUST_PRIVILEGES,
+                      &hToken))
+  {
+    priv.PrivilegeCount = 1;
+    priv.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
+
+    if(LookupPrivilegeValue(NULL,
+                            SE_SYSTEMTIME_NAME,
+                            &priv.Privileges[0].Luid))
+    {
+      if(AdjustTokenPrivileges(hToken,
+                               FALSE,
+                               &priv,
+                               sizeof(previouspriv),
+                               &previouspriv,
+                               0) &&
+         GetLastError() == ERROR_SUCCESS)
+      {
+        /*
+         * we successfully enabled it, we're permitted to change the system time
+         */
+        Ret = SetLocalTime(&SetupData->SystemTime);
+        
+        /*
+         * for the sake of security, restore the previous status again
+         */
+        if(previouspriv.PrivilegeCount > 0)
+        {
+          AdjustTokenPrivileges(hToken,
+                                FALSE,
+                                &previouspriv,
+                                0,
+                                NULL,
+                                0);
+        }
+      }
+    }
+    CloseHandle(hToken);
+  }
+  
+  return Ret;
+}
+
+
 INT_PTR CALLBACK
 DateTimePageDlgProc(HWND hwndDlg,
                     UINT uMsg,
@@ -1167,7 +1223,13 @@
                   SetLocalTimeZone(GetDlgItem(hwndDlg, IDC_TIMEZONELIST),
                                    SetupData);
                   SetAutoDaylightInfo(GetDlgItem(hwndDlg, IDC_AUTODAYLIGHT));
-                  SetLocalTime(&SetupData->SystemTime);
+                  if(!SetSystemLocalTime(hwndDlg, SetupData))
+                  {
+                    MessageBox(hwndDlg,
+                               _T("Setup was unable to set the local time."),
+                               _T("ReactOS Setup"),
+                               MB_ICONWARNING | MB_OK);
+                  }
                 }
                 break;