HINF UnattendInf;
UINT ErrorLine;
INT IntValue;
- PWCHAR Value;
+ PCWSTR Value;
WCHAR UnattendInfPath[MAX_PATH];
CombinePaths(UnattendInfPath, ARRAYSIZE(UnattendInfPath), 2,
}
/* Load 'unattend.inf' from installation media */
- UnattendInf = SetupOpenInfFileExW(UnattendInfPath,
- NULL,
- INF_STYLE_OLDNT,
- pSetupData->LanguageId,
- &ErrorLine);
-
+ UnattendInf = SpInfOpenInfFile(UnattendInfPath,
+ NULL,
+ INF_STYLE_OLDNT,
+ pSetupData->LanguageId,
+ &ErrorLine);
if (UnattendInf == INVALID_HANDLE_VALUE)
{
- DPRINT("SetupOpenInfFileExW() failed\n");
+ DPRINT("SpInfOpenInfFile() failed\n");
return;
}
/* Open 'Unattend' section */
- if (!SetupFindFirstLineW(UnattendInf, L"Unattend", L"Signature", &Context))
+ if (!SpInfFindFirstLine(UnattendInf, L"Unattend", L"Signature", &Context))
{
- DPRINT("SetupFindFirstLineW() failed for section 'Unattend'\n");
+ DPRINT("SpInfFindFirstLine() failed for section 'Unattend'\n");
goto Quit;
}
INF_FreeData(Value);
/* Check if Unattend setup is enabled */
- if (!SetupFindFirstLineW(UnattendInf, L"Unattend", L"UnattendSetupEnabled", &Context))
+ if (!SpInfFindFirstLine(UnattendInf, L"Unattend", L"UnattendSetupEnabled", &Context))
{
DPRINT("Can't find key 'UnattendSetupEnabled'\n");
goto Quit;
INF_FreeData(Value);
/* Search for 'DestinationDiskNumber' in the 'Unattend' section */
- if (!SetupFindFirstLineW(UnattendInf, L"Unattend", L"DestinationDiskNumber", &Context))
+ if (!SpInfFindFirstLine(UnattendInf, L"Unattend", L"DestinationDiskNumber", &Context))
{
- DPRINT("SetupFindFirstLine() failed for key 'DestinationDiskNumber'\n");
+ DPRINT("SpInfFindFirstLine() failed for key 'DestinationDiskNumber'\n");
goto Quit;
}
- if (!SetupGetIntField(&Context, 1, &IntValue))
+ if (!SpInfGetIntField(&Context, 1, &IntValue))
{
- DPRINT("SetupGetIntField() failed for key 'DestinationDiskNumber'\n");
+ DPRINT("SpInfGetIntField() failed for key 'DestinationDiskNumber'\n");
goto Quit;
}
pSetupData->DestinationDiskNumber = (LONG)IntValue;
/* Search for 'DestinationPartitionNumber' in the 'Unattend' section */
- if (!SetupFindFirstLineW(UnattendInf, L"Unattend", L"DestinationPartitionNumber", &Context))
+ if (!SpInfFindFirstLine(UnattendInf, L"Unattend", L"DestinationPartitionNumber", &Context))
{
- DPRINT("SetupFindFirstLine() failed for key 'DestinationPartitionNumber'\n");
+ DPRINT("SpInfFindFirstLine() failed for key 'DestinationPartitionNumber'\n");
goto Quit;
}
- if (!SetupGetIntField(&Context, 1, &IntValue))
+ if (!SpInfGetIntField(&Context, 1, &IntValue))
{
- DPRINT("SetupGetIntField() failed for key 'DestinationPartitionNumber'\n");
+ DPRINT("SpInfGetIntField() failed for key 'DestinationPartitionNumber'\n");
goto Quit;
}
pSetupData->DestinationPartitionNumber = (LONG)IntValue;
/* Search for 'InstallationDirectory' in the 'Unattend' section (optional) */
- if (SetupFindFirstLineW(UnattendInf, L"Unattend", L"InstallationDirectory", &Context))
+ if (SpInfFindFirstLine(UnattendInf, L"Unattend", L"InstallationDirectory", &Context))
{
/* Get pointer 'InstallationDirectory' key */
if (!INF_GetData(&Context, NULL, &Value))
/* Search for 'MBRInstallType' in the 'Unattend' section */
pSetupData->MBRInstallType = -1;
- if (SetupFindFirstLineW(UnattendInf, L"Unattend", L"MBRInstallType", &Context))
+ if (SpInfFindFirstLine(UnattendInf, L"Unattend", L"MBRInstallType", &Context))
{
- if (SetupGetIntField(&Context, 1, &IntValue))
+ if (SpInfGetIntField(&Context, 1, &IntValue))
{
pSetupData->MBRInstallType = IntValue;
}
/* Search for 'FormatPartition' in the 'Unattend' section */
pSetupData->FormatPartition = 0;
- if (SetupFindFirstLineW(UnattendInf, L"Unattend", L"FormatPartition", &Context))
+ if (SpInfFindFirstLine(UnattendInf, L"Unattend", L"FormatPartition", &Context))
{
- if (SetupGetIntField(&Context, 1, &IntValue))
+ if (SpInfGetIntField(&Context, 1, &IntValue))
{
pSetupData->FormatPartition = IntValue;
}
}
pSetupData->AutoPartition = 0;
- if (SetupFindFirstLineW(UnattendInf, L"Unattend", L"AutoPartition", &Context))
+ if (SpInfFindFirstLine(UnattendInf, L"Unattend", L"AutoPartition", &Context))
{
- if (SetupGetIntField(&Context, 1, &IntValue))
+ if (SpInfGetIntField(&Context, 1, &IntValue))
{
pSetupData->AutoPartition = IntValue;
}
}
/* Search for LocaleID in the 'Unattend' section */
- if (SetupFindFirstLineW(UnattendInf, L"Unattend", L"LocaleID", &Context))
+ if (SpInfFindFirstLine(UnattendInf, L"Unattend", L"LocaleID", &Context))
{
if (INF_GetData(&Context, NULL, &Value))
{
}
Quit:
- SetupCloseInfFile(UnattendInf);
+ SpInfCloseInfFile(UnattendInf);
}
VOID
OUT PUNICODE_STRING SourceRootDir)
{
NTSTATUS Status;
- HANDLE Handle;
+ HANDLE LinkHandle;
OBJECT_ATTRIBUTES ObjectAttributes;
UCHAR ImageFileBuffer[sizeof(UNICODE_STRING) + MAX_PATH * sizeof(WCHAR)];
PUNICODE_STRING InstallSourcePath = (PUNICODE_STRING)&ImageFileBuffer;
NULL,
NULL);
- Status = NtOpenSymbolicLinkObject(&Handle,
+ Status = NtOpenSymbolicLinkObject(&LinkHandle,
SYMBOLIC_LINK_QUERY,
&ObjectAttributes);
if (!NT_SUCCESS(Status))
SystemRootBuffer,
sizeof(SystemRootBuffer));
- Status = NtQuerySymbolicLinkObject(Handle,
+ /* Resolve the link and close its handle */
+ Status = NtQuerySymbolicLinkObject(LinkHandle,
&SystemRootPath,
&BufferSize);
- NtClose(Handle);
+ NtClose(LinkHandle);
if (!NT_SUCCESS(Status))
return Status; // Unexpected error
INFCONTEXT Context;
UINT ErrorLine;
INT IntValue;
- PWCHAR Value;
+ PCWSTR Value;
WCHAR FileNameBuffer[MAX_PATH];
CombinePaths(FileNameBuffer, ARRAYSIZE(FileNameBuffer), 2,
DPRINT("SetupInf path: '%S'\n", FileNameBuffer);
pSetupData->SetupInf =
- SetupOpenInfFileExW(FileNameBuffer,
- NULL,
- /* INF_STYLE_WIN4 | */ INF_STYLE_OLDNT,
- pSetupData->LanguageId,
- &ErrorLine);
-
+ SpInfOpenInfFile(FileNameBuffer,
+ NULL,
+ /* INF_STYLE_WIN4 | */ INF_STYLE_OLDNT,
+ pSetupData->LanguageId,
+ &ErrorLine);
if (pSetupData->SetupInf == INVALID_HANDLE_VALUE)
return ERROR_LOAD_TXTSETUPSIF;
/* Open 'Version' section */
- if (!SetupFindFirstLineW(pSetupData->SetupInf, L"Version", L"Signature", &Context))
+ if (!SpInfFindFirstLine(pSetupData->SetupInf, L"Version", L"Signature", &Context))
return ERROR_CORRUPT_TXTSETUPSIF;
/* Get pointer 'Signature' key */
INF_FreeData(Value);
/* Open 'DiskSpaceRequirements' section */
- if (!SetupFindFirstLineW(pSetupData->SetupInf, L"DiskSpaceRequirements", L"FreeSysPartDiskSpace", &Context))
+ if (!SpInfFindFirstLine(pSetupData->SetupInf, L"DiskSpaceRequirements", L"FreeSysPartDiskSpace", &Context))
return ERROR_CORRUPT_TXTSETUPSIF;
pSetupData->RequiredPartitionDiskSpace = ~0;
/* Get the 'FreeSysPartDiskSpace' value */
- if (!SetupGetIntField(&Context, 1, &IntValue))
+ if (!SpInfGetIntField(&Context, 1, &IntValue))
return ERROR_CORRUPT_TXTSETUPSIF;
pSetupData->RequiredPartitionDiskSpace = (ULONG)IntValue;
//
/* Update the Setup Source paths */
- if (SetupFindFirstLineW(pSetupData->SetupInf, L"SetupData", L"SetupSourceDevice", &Context))
+ if (SpInfFindFirstLine(pSetupData->SetupInf, L"SetupData", L"SetupSourceDevice", &Context))
{
/*
* Get optional pointer 'SetupSourceDevice' key, its presence
RtlCreateUnicodeString(&pSetupData->SourceRootPath, Value);
INF_FreeData(Value);
- if (!SetupFindFirstLineW(pSetupData->SetupInf, L"SetupData", L"SetupSourcePath", &Context))
+ if (!SpInfFindFirstLine(pSetupData->SetupInf, L"SetupData", L"SetupSourcePath", &Context))
{
/* The 'SetupSourcePath' value is mandatory! */
return ERROR_CORRUPT_TXTSETUPSIF;
/* Search for 'DefaultPath' in the 'SetupData' section */
pSetupData->InstallationDirectory[0] = 0;
- if (SetupFindFirstLineW(pSetupData->SetupInf, L"SetupData", L"DefaultPath", &Context))
+ if (SpInfFindFirstLine(pSetupData->SetupInf, L"SetupData", L"DefaultPath", &Context))
{
/* Get pointer 'DefaultPath' key */
if (!INF_GetData(&Context, NULL, &Value))
RtlCreateUnicodeString(&pSetupData->DestinationRootPath, PathBuffer);
DPRINT("DestinationRootPath: %wZ\n", &pSetupData->DestinationRootPath);
+ // FIXME! Which variable to choose?
+ if (!InstallationDir)
+ InstallationDir = pSetupData->InstallationDirectory;
+
/** Equivalent of 'NTOS_INSTALLATION::SystemArcPath' **/
/* Create 'pSetupData->DestinationArcPath' */
RtlFreeUnicodeString(&pSetupData->DestinationArcPath);
// pSetupData->LayoutList = NULL;
// pSetupData->LanguageList = NULL;
+ /* Initialize error handling */
+ pSetupData->LastErrorNumber = ERROR_SUCCESS;
+ pSetupData->ErrorRoutine = NULL;
+
/* Initialize global unicode strings */
RtlInitUnicodeString(&pSetupData->SourcePath, NULL);
RtlInitUnicodeString(&pSetupData->SourceRootPath, NULL);
}
/* Close the Setup INF */
- SetupCloseInfFile(pSetupData->SetupInf);
+ SpInfCloseInfFile(pSetupData->SetupInf);
}
/*
*/
ERROR_NUMBER
UpdateRegistry(
- IN HINF SetupInf,
IN OUT PUSETUP_DATA pSetupData,
/**/IN BOOLEAN RepairUpdateFlag, /* HACK HACK! */
/**/IN PPARTLIST PartitionList, /* HACK HACK! */
/**/IN WCHAR DestinationDriveLetter, /* HACK HACK! */
/**/IN PCWSTR SelectedLanguageId, /* HACK HACK! */
- IN PGENERIC_LIST DisplayList,
- IN PGENERIC_LIST LayoutList,
- IN PGENERIC_LIST LanguageList,
IN PREGISTRY_STATUS_ROUTINE StatusRoutine OPTIONAL)
{
ERROR_NUMBER ErrorNumber;
NTSTATUS Status;
INFCONTEXT InfContext;
- PWSTR Action;
- PWSTR File;
- PWSTR Section;
+ PCWSTR Action;
+ PCWSTR File;
+ PCWSTR Section;
BOOLEAN Success;
BOOLEAN ShouldRepairRegistry = FALSE;
BOOLEAN Delete;
* "repair" (aka. recreate: ShouldRepairRegistry == TRUE).
*/
- Success = SetupFindFirstLineW(SetupInf, L"HiveInfs.Fresh", NULL, &InfContext); // Windows-compatible
+ Success = SpInfFindFirstLine(pSetupData->SetupInf, L"HiveInfs.Fresh", NULL, &InfContext); // Windows-compatible
if (!Success)
- Success = SetupFindFirstLineW(SetupInf, L"HiveInfs.Install", NULL, &InfContext); // ReactOS-specific
+ Success = SpInfFindFirstLine(pSetupData->SetupInf, L"HiveInfs.Install", NULL, &InfContext); // ReactOS-specific
if (!Success)
{
- DPRINT1("SetupFindFirstLine() failed\n");
+ DPRINT1("SpInfFindFirstLine() failed\n");
ErrorNumber = ERROR_FIND_REGISTRY;
goto Cleanup;
}
* we only update the hives.
*/
- Success = SetupFindFirstLineW(SetupInf, L"HiveInfs.Upgrade", NULL, &InfContext);
+ Success = SpInfFindFirstLine(pSetupData->SetupInf, L"HiveInfs.Upgrade", NULL, &InfContext);
if (!Success)
{
/* Nothing to do for update! */
ErrorNumber = ERROR_IMPORT_HIVE;
goto Cleanup;
}
- } while (SetupFindNextLine(&InfContext, &InfContext));
+ } while (SpInfFindNextLine(&InfContext, &InfContext));
if (!RepairUpdateFlag || ShouldRepairRegistry)
{
/* Update display registry settings */
if (StatusRoutine) StatusRoutine(DisplaySettingsUpdate);
- if (!ProcessDisplayRegistry(SetupInf, DisplayList))
+ if (!ProcessDisplayRegistry(pSetupData->SetupInf, pSetupData->DisplayList))
{
ErrorNumber = ERROR_UPDATE_DISPLAY_SETTINGS;
goto Cleanup;
/* Set the locale */
if (StatusRoutine) StatusRoutine(LocaleSettingsUpdate);
- if (!ProcessLocaleRegistry(LanguageList))
+ if (!ProcessLocaleRegistry(pSetupData->LanguageList))
{
ErrorNumber = ERROR_UPDATE_LOCALESETTINGS;
goto Cleanup;
{
/* Update keyboard layout settings */
if (StatusRoutine) StatusRoutine(KeybSettingsUpdate);
- if (!ProcessKeyboardLayoutRegistry(LayoutList, SelectedLanguageId))
+ if (!ProcessKeyboardLayoutRegistry(pSetupData->LayoutList, SelectedLanguageId))
{
ErrorNumber = ERROR_UPDATE_KBSETTINGS;
goto Cleanup;