#include "precomp.h"
+#include <stdlib.h>
+#include <time.h>
+#include <winnls.h>
+#include <windowsx.h>
+
#define NDEBUG
#include <debug.h>
-#define VMWINST
+#undef VMWINST
#define PM_REGISTRATION_NOTIFY (WM_APP + 1)
/* Private Message used to communicate progress from the background
/* FUNCTIONS ****************************************************************/
+
+extern void WINAPI Control_RunDLLW(HWND hWnd, HINSTANCE hInst, LPCWSTR cmd, DWORD nCmdShow);
+
BOOL
GetRosInstallCD(WCHAR *pwszPath, DWORD cchPathMax);
PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_BACK | PSWIZB_NEXT);
if (SetupData.UnattendSetup)
{
- SetWindowLongPtr(hwndDlg, DWL_MSGRESULT, IDD_OWNERPAGE);
+ SetWindowLongPtr(hwndDlg, DWL_MSGRESULT, IDD_LOCALEPAGE);
return TRUE;
}
break;
{
WCHAR Title[64];
WCHAR ErrorComputerName[256];
+
if (!SetComputerNameW(ComputerName))
{
- if (0 == LoadStringW(hDllInstance, IDS_REACTOS_SETUP, Title, sizeof(Title) / sizeof(Title[0])))
+ if (hwndDlg != NULL)
{
- wcscpy(Title, L"ReactOS Setup");
- }
- if (0 == LoadStringW(hDllInstance, IDS_WZD_SETCOMPUTERNAME, ErrorComputerName,
- sizeof(ErrorComputerName) / sizeof(ErrorComputerName[0])))
- {
- wcscpy(ErrorComputerName, L"Setup failed to set the computer name.");
+ if (0 == LoadStringW(hDllInstance, IDS_REACTOS_SETUP, Title, sizeof(Title) / sizeof(Title[0])))
+ {
+ wcscpy(Title, L"ReactOS Setup");
+ }
+ if (0 == LoadStringW(hDllInstance, IDS_WZD_SETCOMPUTERNAME, ErrorComputerName,
+ sizeof(ErrorComputerName) / sizeof(ErrorComputerName[0])))
+ {
+ wcscpy(ErrorComputerName, L"Setup failed to set the computer name.");
+ }
+ MessageBoxW(hwndDlg, ErrorComputerName, Title, MB_ICONERROR | MB_OK);
}
- MessageBoxW(hwndDlg, ErrorComputerName, Title, MB_ICONERROR | MB_OK);
return FALSE;
}
return TRUE;
}
+
+static
+BOOL
+WriteDefaultLogonData(LPWSTR Domain)
+{
+ WCHAR szAdministratorName[256];
+ HKEY hKey = NULL;
+ LONG lError;
+
+ if (LoadStringW(hDllInstance,
+ IDS_ADMINISTRATOR_NAME,
+ szAdministratorName,
+ sizeof(szAdministratorName) / sizeof(WCHAR)) == 0)
+ {
+ wcscpy(szAdministratorName, L"Administrator");
+ }
+
+ lError = RegOpenKeyExW(HKEY_LOCAL_MACHINE,
+ L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon",
+ 0,
+ KEY_SET_VALUE,
+ &hKey);
+ if (lError != ERROR_SUCCESS)
+ return FALSE;
+
+ lError = RegSetValueEx(hKey,
+ L"DefaultDomain",
+ 0,
+ REG_SZ,
+ (LPBYTE)Domain,
+ (wcslen(Domain)+ 1) * sizeof(WCHAR));
+ if (lError != ERROR_SUCCESS)
+ {
+ DPRINT1("RegSetValueEx(\"DefaultDomain\") failed!\n");
+ }
+
+ lError = RegSetValueEx(hKey,
+ L"DefaultUserName",
+ 0,
+ REG_SZ,
+ (LPBYTE)szAdministratorName,
+ (wcslen(szAdministratorName)+ 1) * sizeof(WCHAR));
+ if (lError != ERROR_SUCCESS)
+ {
+ DPRINT1("RegSetValueEx(\"DefaultUserName\") failed!\n");
+ }
+
+ RegCloseKey(hKey);
+
+ return TRUE;
+}
+
+
/* lpBuffer will be filled with a 15-char string (plus the null terminator) */
static void
GenerateComputerName(LPWSTR lpBuffer)
LPARAM lParam)
{
WCHAR ComputerName[MAX_COMPUTERNAME_LENGTH + 1];
- WCHAR Password1[15];
- WCHAR Password2[15];
+ WCHAR Password1[128];
+ WCHAR Password2[128];
PWCHAR Password;
WCHAR Title[64];
WCHAR EmptyComputerName[256], NotMatchPassword[256], WrongPassword[256];
switch (uMsg)
{
case WM_INITDIALOG:
- {
/* Generate a new pseudo-random computer name */
GenerateComputerName(ComputerName);
/* Set text limits */
SendDlgItemMessage(hwndDlg, IDC_COMPUTERNAME, EM_LIMITTEXT, MAX_COMPUTERNAME_LENGTH, 0);
- SendDlgItemMessage(hwndDlg, IDC_ADMINPASSWORD1, EM_LIMITTEXT, 14, 0);
- SendDlgItemMessage(hwndDlg, IDC_ADMINPASSWORD2, EM_LIMITTEXT, 14, 0);
+ SendDlgItemMessage(hwndDlg, IDC_ADMINPASSWORD1, EM_LIMITTEXT, 127, 0);
+ SendDlgItemMessage(hwndDlg, IDC_ADMINPASSWORD2, EM_LIMITTEXT, 127, 0);
/* Set focus to computer name */
SetFocus(GetDlgItem(hwndDlg, IDC_COMPUTERNAME));
SendMessage(GetDlgItem(hwndDlg, IDC_COMPUTERNAME), WM_SETTEXT, 0, (LPARAM)SetupData.ComputerName);
SendMessage(GetDlgItem(hwndDlg, IDC_ADMINPASSWORD1), WM_SETTEXT, 0, (LPARAM)SetupData.AdminPassword);
SendMessage(GetDlgItem(hwndDlg, IDC_ADMINPASSWORD2), WM_SETTEXT, 0, (LPARAM)SetupData.AdminPassword);
+ WriteComputerSettings(SetupData.ComputerName, NULL);
+ SetAdministratorPassword(SetupData.AdminPassword);
}
- }
- break;
+ /* Store the administrator account name as the default user name */
+ WriteDefaultLogonData(SetupData.ComputerName);
+ break;
case WM_NOTIFY:
PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_BACK | PSWIZB_NEXT);
if (SetupData.UnattendSetup && WriteComputerSettings(SetupData.ComputerName, hwndDlg))
{
- SetWindowLongPtr(hwndDlg, DWL_MSGRESULT, IDD_LOCALEPAGE);
+ SetWindowLongPtr(hwndDlg, DWL_MSGRESULT, IDD_DATETIMEPAGE);
return TRUE;
}
break;
#if 0
/* Check if admin passwords have been entered */
- if ((GetDlgItemText(hwndDlg, IDC_ADMINPASSWORD1, Password1, 15) == 0) ||
- (GetDlgItemText(hwndDlg, IDC_ADMINPASSWORD2, Password2, 15) == 0))
+ if ((GetDlgItemText(hwndDlg, IDC_ADMINPASSWORD1, Password1, 128) == 0) ||
+ (GetDlgItemText(hwndDlg, IDC_ADMINPASSWORD2, Password2, 128) == 0))
{
if (0 == LoadStringW(hDllInstance, IDS_WZD_PASSWORDEMPTY, EmptyPassword,
sizeof(EmptyPassword) / sizeof(EmptyPassword[0])))
return TRUE;
}
#else
- GetDlgItemTextW(hwndDlg, IDC_ADMINPASSWORD1, Password1, 15);
- GetDlgItemTextW(hwndDlg, IDC_ADMINPASSWORD2, Password2, 15);
+ GetDlgItemTextW(hwndDlg, IDC_ADMINPASSWORD1, Password1, 128);
+ GetDlgItemTextW(hwndDlg, IDC_ADMINPASSWORD2, Password2, 128);
#endif
/* Check if passwords match */
if (wcscmp(Password1, Password2))
Password++;
}
- /* FIXME: Set admin password */
+ /* Set admin password */
+ SetAdministratorPassword(Password1);
break;
case PSN_WIZBACK:
static BOOL
RunControlPanelApplet(HWND hwnd, PCWSTR pwszCPLParameters)
{
+ MSG msg;
if (pwszCPLParameters)
{
STARTUPINFOW StartupInfo;
return FALSE;
}
- WaitForSingleObject(ProcessInformation.hProcess, INFINITE);
+ while((MsgWaitForMultipleObjects(1, &ProcessInformation.hProcess, FALSE, INFINITE, QS_ALLINPUT|QS_ALLPOSTMESSAGE )) != WAIT_OBJECT_0)
+ {
+ while(PeekMessageW(&msg, NULL, 0, 0, PM_REMOVE))
+ {
+ TranslateMessage(&msg);
+ DispatchMessageW(&msg);
+ }
+ }
CloseHandle(ProcessInformation.hThread);
CloseHandle(ProcessInformation.hProcess);
return TRUE;
RunControlPanelApplet(hwndDlg, L"intl.cpl,,/f:\"unattend.inf\"");
}
- SetWindowLongPtr(hwndDlg, DWL_MSGRESULT, IDD_DATETIMEPAGE);
+ SetWindowLongPtr(hwndDlg, DWL_MSGRESULT, IDD_OWNERPAGE);
return TRUE;
}
break;
BOOL bFound = FALSE;
unsigned long iLanguageID;
- if (RegOpenKeyExW(HKEY_LOCAL_MACHINE,
- L"SYSTEM\\CurrentControlSet\\Control\\NLS\\Language",
- 0,
- KEY_ALL_ACCESS,
- &hKey))
- return FALSE;
-
- dwValueSize = 9 * sizeof(WCHAR);
- if (RegQueryValueExW(hKey,
- L"Default",
- NULL,
- NULL,
- (LPBYTE)szLanguageIdString,
- &dwValueSize))
+ if (*lpIndex == -1)
{
+ *lpIndex = 85; /* fallback to GMT time zone */
+
+ if (RegOpenKeyExW(HKEY_LOCAL_MACHINE,
+ L"SYSTEM\\CurrentControlSet\\Control\\NLS\\Language",
+ 0,
+ KEY_ALL_ACCESS,
+ &hKey))
+ return FALSE;
+
+ dwValueSize = 9 * sizeof(WCHAR);
+ if (RegQueryValueExW(hKey,
+ L"Default",
+ NULL,
+ NULL,
+ (LPBYTE)szLanguageIdString,
+ &dwValueSize))
+ {
+ RegCloseKey(hKey);
+ return FALSE;
+ }
+
+ iLanguageID = wcstoul(szLanguageIdString, NULL, 16);
RegCloseKey(hKey);
- return FALSE;
}
-
- iLanguageID = wcstoul(szLanguageIdString, NULL, 16);
- RegCloseKey(hKey);
+ else
+ {
+ iLanguageID = *lpIndex;
+ }
if (RegOpenKeyExW(HKEY_LOCAL_MACHINE,
L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Time Zones",
else
{
ShowTimeZoneList(GetDlgItem(hwndDlg, IDC_TIMEZONELIST),
- SetupData, 85 /* GMT time zone */);
+ SetupData, -1);
SendDlgItemMessage(hwndDlg, IDC_AUTODAYLIGHT, BM_SETCHECK, (WPARAM)BST_CHECKED, 0);
}
RegistrationData->hwndDlg = hwndDlg;
RegistrationData->DllCount = DllCount;
RegistrationThread = CreateThread(NULL, 0, RegistrationProc,
- (LPVOID) RegistrationData, 0, NULL);
+ RegistrationData, 0, NULL);
if (RegistrationThread != NULL)
{
CloseHandle(RegistrationThread);
}
}
-
static INT_PTR CALLBACK
FinishDlgProc(HWND hwndDlg,
UINT uMsg,
{
case WM_INITDIALOG:
{
- PSETUPDATA SetupData;
-
/* Get pointer to the global setup data */
- SetupData = (PSETUPDATA)((LPPROPSHEETPAGE)lParam)->lParam;
+ PSETUPDATA SetupData = (PSETUPDATA)((LPPROPSHEETPAGE)lParam)->lParam;
+
+ if (!SetupData->UnattendSetup || !SetupData->DisableGeckoInst)
+ {
+ /* Run the Wine Gecko prompt */
+ Control_RunDLLW(hwndDlg, 0, L"appwiz.cpl install_gecko", SW_SHOW);
+ }
/* Set title font */
SendDlgItemMessage(hwndDlg,
else
SetupData.DisableVmwInst = 0;
}
+ else if (!wcscmp(szName, L"DisableGeckoInst"))
+ {
+ if(!wcscmp(szValue, L"yes"))
+ SetupData.DisableGeckoInst = 1;
+ else
+ SetupData.DisableGeckoInst = 0;
+ }
}
while (SetupFindNextLine(&InfContext, &InfContext));
-
if (RegOpenKeyExW(HKEY_LOCAL_MACHINE,
L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce",
0,
psp.pfnDlgProc = AckPageDlgProc;
ahpsp[nPages++] = CreatePropertySheetPage(&psp);
+ /* Create the Locale page */
+ psp.dwFlags = PSP_DEFAULT | PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
+ psp.pszHeaderTitle = MAKEINTRESOURCE(IDS_LOCALETITLE);
+ psp.pszHeaderSubTitle = MAKEINTRESOURCE(IDS_LOCALESUBTITLE);
+ psp.pfnDlgProc = LocalePageDlgProc;
+ psp.pszTemplate = MAKEINTRESOURCE(IDD_LOCALEPAGE);
+ ahpsp[nPages++] = CreatePropertySheetPage(&psp);
+
+
/* Create the Owner page */
psp.dwFlags = PSP_DEFAULT | PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
psp.pszHeaderTitle = MAKEINTRESOURCE(IDS_OWNERTITLE);
ahpsp[nPages++] = CreatePropertySheetPage(&psp);
- /* Create the Locale page */
- psp.dwFlags = PSP_DEFAULT | PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
- psp.pszHeaderTitle = MAKEINTRESOURCE(IDS_LOCALETITLE);
- psp.pszHeaderSubTitle = MAKEINTRESOURCE(IDS_LOCALESUBTITLE);
- psp.pfnDlgProc = LocalePageDlgProc;
- psp.pszTemplate = MAKEINTRESOURCE(IDD_LOCALEPAGE);
- ahpsp[nPages++] = CreatePropertySheetPage(&psp);
-
-
/* Create the DateTime page */
psp.dwFlags = PSP_DEFAULT | PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
psp.pszHeaderTitle = MAKEINTRESOURCE(IDS_DATETIMETITLE);
while (GetMessage(&msg, NULL, 0, 0))
{
- if(!IsDialogMessage(hWnd, &msg))
+ if (!IsDialogMessage(hWnd, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);