Author: janderwald
Date: Tue Aug 28 18:00:24 2007
New Revision: 28616
URL:
http://svn.reactos.org/svn/reactos?rev=28616&view=rev
Log:
- search for ReactOS installation cd and try locate directly the unattend.inf. This allows
us to use the _same_ unattend.inf which is used in usetup. As a result we no longer need
to put a second unattend.inf in the reactos.cab which revives the bootcdregtest
Modified:
trunk/reactos/dll/win32/syssetup/wizard.c
Modified: trunk/reactos/dll/win32/syssetup/wizard.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/syssetup/wizard.…
==============================================================================
--- trunk/reactos/dll/win32/syssetup/wizard.c (original)
+++ trunk/reactos/dll/win32/syssetup/wizard.c Tue Aug 28 18:00:24 2007
@@ -60,6 +60,8 @@
/* FUNCTIONS ****************************************************************/
+BOOL
+GetRosInstallCD(WCHAR * szPath, DWORD dwPathLength);
#ifdef VMWINST
static BOOL
@@ -779,7 +781,7 @@
static BOOL
-RunControlPanelApplet(HWND hwnd, TCHAR *lpCommandLine)
+RunControlPanelApplet(HWND hwnd, WCHAR *lpCommandLine)
{
STARTUPINFO StartupInfo;
PROCESS_INFORMATION ProcessInformation;
@@ -787,7 +789,7 @@
ZeroMemory(&StartupInfo, sizeof(STARTUPINFO));
StartupInfo.cb = sizeof(STARTUPINFO);
- if (!CreateProcess(NULL,
+ if (!CreateProcessW(NULL,
lpCommandLine,
NULL,
NULL,
@@ -815,7 +817,7 @@
LPARAM lParam)
{
PSETUPDATA SetupData;
- TCHAR szBuffer[MAX_PATH];
+ WCHAR szBuffer[1024];
/* Retrieve pointer to the global setup data */
SetupData = (PSETUPDATA)GetWindowLongPtr (hwndDlg, GWL_USERDATA);
@@ -841,7 +843,7 @@
{
case IDC_CUSTOMLOCALE:
{
- _tcscpy(szBuffer, _T("rundll32.exe shell32.dll,Control_RunDLL
intl.cpl,,5"));
+ wcscpy(szBuffer, _T("rundll32.exe shell32.dll,Control_RunDLL
intl.cpl,,5"));
RunControlPanelApplet(hwndDlg, szBuffer);
/* FIXME: Update input locale name */
}
@@ -849,7 +851,7 @@
case IDC_CUSTOMLAYOUT:
{
- _tcscpy(szBuffer, _T("rundll32.exe shell32.dll,Control_RunDLL
main.cpl,@1"));
+ wcscpy(szBuffer, _T("rundll32.exe shell32.dll,Control_RunDLL
main.cpl,@1"));
RunControlPanelApplet(hwndDlg, szBuffer);
}
break;
@@ -868,7 +870,16 @@
PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_BACK | PSWIZB_NEXT);
if (SetupData->UnattendSetup)
{
- _tcscpy(szBuffer, _T("rundll32.exe shell32.dll,Control_RunDLL
intl.cpl,,/f:\"unattend.inf\""));
+ WCHAR szPath[MAX_PATH];
+ if (GetRosInstallCD(szPath, MAX_PATH))
+ {
+ wsprintf(szBuffer, L"rundll32.exe shell32.dll,Control_RunDLL
intl.cpl,,/f:\"%s\\reactos\\unattend.inf\"", szPath);
+ }
+ else
+ {
+ wcscpy(szBuffer, L"rundll32.exe shell32.dll,Control_RunDLL
intl.cpl,,/f:\"unattend.inf\"");
+ }
+
RunControlPanelApplet(hwndDlg, szBuffer);
SetWindowLong(hwndDlg, DWL_MSGRESULT, IDD_DATETIMEPAGE);
return TRUE;
@@ -2144,29 +2155,103 @@
return TRUE;
}
+/*
+ * GetRosInstallCD should find the path to ros installation medium
+ * BUG 1
+ * If there are more than one CDDrive in it containing a ReactOS
+ * installation cd, then it will pick the first one regardless if
+ * it is really the installation cd
+ *
+ * The best way to implement this is to set the key
+ * HKLM\Software\Microsoft\Windows NT\CurrentVersion\SourcePath (REG_SZ)
+ */
+
+BOOL
+GetRosInstallCD(WCHAR * szPath, DWORD dwPathLength)
+{
+ WCHAR szDrives[512];
+ WCHAR szDrive[] = L"D:\\";
+ DWORD dwLength, dwIndex;
+ WCHAR * pDrive;
+ dwLength = GetLogicalDriveStringsW(sizeof(szDrives) / sizeof(WCHAR), szDrives);
+
+ if (dwLength > (sizeof(szDrives) / sizeof(WCHAR)) || dwLength == 0)
+ {
+ /* buffer too small or failure */
+ LogItem(SYSSETUP_SEVERITY_INFORMATION, L"GetLogicalDriveStringsW
failed");
+ return FALSE;
+ }
+
+ pDrive = szDrives;
+ for (dwIndex = 0; dwIndex < dwLength; dwIndex++)
+ {
+ szDrive[0] = pDrive[dwIndex];
+ if (GetDriveType(szDrive) == DRIVE_CDROM)
+ {
+ WCHAR szBuffer[MAX_PATH];
+ wcscpy(szBuffer, szDrive);
+ wcscat(szBuffer, L"reactos\\ntoskrnl.exe");
+ LogItem(SYSSETUP_SEVERITY_INFORMATION, szBuffer);
+ if (FileExists(szBuffer, NULL))
+ {
+ wcsncpy(szPath, szDrive, dwPathLength);
+ return TRUE;
+ }
+ }
+ }
+ return FALSE;
+}
VOID
-InstallWizard(VOID)
-{
- PROPSHEETHEADER psh;
- HPROPSHEETPAGE ahpsp[8];
- PROPSHEETPAGE psp = {0};
- UINT nPages = 0;
+ProcessUnattendSetup()
+{
+ WCHAR szPath[MAX_PATH];
HINF hUnattendedInf;
-
- /* Clear setup data */
- ZeroMemory(&SetupData, sizeof(SETUPDATA));
-
- hUnattendedInf = SetupOpenInfFileW(L"unattend.inf",
+ DWORD dwLength;
+
+ if (!GetRosInstallCD(szPath, MAX_PATH))
+ {
+ /* no cd drive found */
+ return;
+ }
+
+ dwLength = wcslen(szPath);
+ if (dwLength + 21 > MAX_PATH)
+ {
+ /* FIXME
+ * allocate bigger buffer
+ */
+ return;
+ }
+
+ wcscat(szPath, L"reactos\\unattend.inf");
+
+ hUnattendedInf = SetupOpenInfFileW(szPath,
NULL,
INF_STYLE_OLDNT,
NULL);
-
+
if (hUnattendedInf != INVALID_HANDLE_VALUE)
{
SetupData.UnattendSetup = ProcessUnattendInf(hUnattendedInf);
SetupCloseInfFile(hUnattendedInf);
}
+}
+
+
+VOID
+InstallWizard(VOID)
+{
+ PROPSHEETHEADER psh;
+ HPROPSHEETPAGE ahpsp[8];
+ PROPSHEETPAGE psp = {0};
+ UINT nPages = 0;
+
+ /* Clear setup data */
+ ZeroMemory(&SetupData, sizeof(SETUPDATA));
+
+ ProcessUnattendSetup();
+
/* Create the Welcome page */
psp.dwSize = sizeof(PROPSHEETPAGE);