[SETUPLIB][USETUP] Minor improvements.

- Use adequate access flag when opening symbolic links.
- Simplify the prototype of UpdateRegistry() since now both Setup INF
  handle and settings lists are inside the USETUP_DATA structure.
This commit is contained in:
Hermès Bélusca-Maïto 2018-01-07 01:35:48 +01:00
parent 13998a15c9
commit 1b0c26e21c
No known key found for this signature in database
GPG key ID: 3B2539C65E7B93D0
4 changed files with 16 additions and 27 deletions

View file

@ -391,7 +391,7 @@ GetSourcePaths(
OUT PUNICODE_STRING SourceRootDir) OUT PUNICODE_STRING SourceRootDir)
{ {
NTSTATUS Status; NTSTATUS Status;
HANDLE Handle; HANDLE LinkHandle;
OBJECT_ATTRIBUTES ObjectAttributes; OBJECT_ATTRIBUTES ObjectAttributes;
UCHAR ImageFileBuffer[sizeof(UNICODE_STRING) + MAX_PATH * sizeof(WCHAR)]; UCHAR ImageFileBuffer[sizeof(UNICODE_STRING) + MAX_PATH * sizeof(WCHAR)];
PUNICODE_STRING InstallSourcePath = (PUNICODE_STRING)&ImageFileBuffer; PUNICODE_STRING InstallSourcePath = (PUNICODE_STRING)&ImageFileBuffer;
@ -439,7 +439,7 @@ GetSourcePaths(
NULL, NULL,
NULL); NULL);
Status = NtOpenSymbolicLinkObject(&Handle, Status = NtOpenSymbolicLinkObject(&LinkHandle,
SYMBOLIC_LINK_QUERY, SYMBOLIC_LINK_QUERY,
&ObjectAttributes); &ObjectAttributes);
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
@ -458,10 +458,11 @@ GetSourcePaths(
SystemRootBuffer, SystemRootBuffer,
sizeof(SystemRootBuffer)); sizeof(SystemRootBuffer));
Status = NtQuerySymbolicLinkObject(Handle, /* Resolve the link and close its handle */
Status = NtQuerySymbolicLinkObject(LinkHandle,
&SystemRootPath, &SystemRootPath,
&BufferSize); &BufferSize);
NtClose(Handle); NtClose(LinkHandle);
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
return Status; // Unexpected error return Status; // Unexpected error
@ -790,15 +791,11 @@ FinishSetup(
*/ */
ERROR_NUMBER ERROR_NUMBER
UpdateRegistry( UpdateRegistry(
IN HINF SetupInf,
IN OUT PUSETUP_DATA pSetupData, IN OUT PUSETUP_DATA pSetupData,
/**/IN BOOLEAN RepairUpdateFlag, /* HACK HACK! */ /**/IN BOOLEAN RepairUpdateFlag, /* HACK HACK! */
/**/IN PPARTLIST PartitionList, /* HACK HACK! */ /**/IN PPARTLIST PartitionList, /* HACK HACK! */
/**/IN WCHAR DestinationDriveLetter, /* HACK HACK! */ /**/IN WCHAR DestinationDriveLetter, /* HACK HACK! */
/**/IN PCWSTR SelectedLanguageId, /* 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) IN PREGISTRY_STATUS_ROUTINE StatusRoutine OPTIONAL)
{ {
ERROR_NUMBER ErrorNumber; ERROR_NUMBER ErrorNumber;
@ -860,9 +857,9 @@ DoUpdate:
* "repair" (aka. recreate: ShouldRepairRegistry == TRUE). * "repair" (aka. recreate: ShouldRepairRegistry == TRUE).
*/ */
Success = SpInfFindFirstLine(SetupInf, L"HiveInfs.Fresh", NULL, &InfContext); // Windows-compatible Success = SpInfFindFirstLine(pSetupData->SetupInf, L"HiveInfs.Fresh", NULL, &InfContext); // Windows-compatible
if (!Success) if (!Success)
Success = SpInfFindFirstLine(SetupInf, L"HiveInfs.Install", NULL, &InfContext); // ReactOS-specific Success = SpInfFindFirstLine(pSetupData->SetupInf, L"HiveInfs.Install", NULL, &InfContext); // ReactOS-specific
if (!Success) if (!Success)
{ {
@ -879,7 +876,7 @@ DoUpdate:
* we only update the hives. * we only update the hives.
*/ */
Success = SpInfFindFirstLine(SetupInf, L"HiveInfs.Upgrade", NULL, &InfContext); Success = SpInfFindFirstLine(pSetupData->SetupInf, L"HiveInfs.Upgrade", NULL, &InfContext);
if (!Success) if (!Success)
{ {
/* Nothing to do for update! */ /* Nothing to do for update! */
@ -939,7 +936,7 @@ DoUpdate:
/* Update display registry settings */ /* Update display registry settings */
if (StatusRoutine) StatusRoutine(DisplaySettingsUpdate); if (StatusRoutine) StatusRoutine(DisplaySettingsUpdate);
if (!ProcessDisplayRegistry(SetupInf, DisplayList)) if (!ProcessDisplayRegistry(pSetupData->SetupInf, pSetupData->DisplayList))
{ {
ErrorNumber = ERROR_UPDATE_DISPLAY_SETTINGS; ErrorNumber = ERROR_UPDATE_DISPLAY_SETTINGS;
goto Cleanup; goto Cleanup;
@ -947,7 +944,7 @@ DoUpdate:
/* Set the locale */ /* Set the locale */
if (StatusRoutine) StatusRoutine(LocaleSettingsUpdate); if (StatusRoutine) StatusRoutine(LocaleSettingsUpdate);
if (!ProcessLocaleRegistry(LanguageList)) if (!ProcessLocaleRegistry(pSetupData->LanguageList))
{ {
ErrorNumber = ERROR_UPDATE_LOCALESETTINGS; ErrorNumber = ERROR_UPDATE_LOCALESETTINGS;
goto Cleanup; goto Cleanup;
@ -972,7 +969,7 @@ DoUpdate:
{ {
/* Update keyboard layout settings */ /* Update keyboard layout settings */
if (StatusRoutine) StatusRoutine(KeybSettingsUpdate); if (StatusRoutine) StatusRoutine(KeybSettingsUpdate);
if (!ProcessKeyboardLayoutRegistry(LayoutList, SelectedLanguageId)) if (!ProcessKeyboardLayoutRegistry(pSetupData->LayoutList, SelectedLanguageId))
{ {
ErrorNumber = ERROR_UPDATE_KBSETTINGS; ErrorNumber = ERROR_UPDATE_KBSETTINGS;
goto Cleanup; goto Cleanup;

View file

@ -176,15 +176,11 @@ typedef VOID
ERROR_NUMBER ERROR_NUMBER
UpdateRegistry( UpdateRegistry(
IN HINF SetupInf,
IN OUT PUSETUP_DATA pSetupData, IN OUT PUSETUP_DATA pSetupData,
/**/IN BOOLEAN RepairUpdateFlag, /* HACK HACK! */ /**/IN BOOLEAN RepairUpdateFlag, /* HACK HACK! */
/**/IN PPARTLIST PartitionList, /* HACK HACK! */ /**/IN PPARTLIST PartitionList, /* HACK HACK! */
/**/IN WCHAR DestinationDriveLetter, /* HACK HACK! */ /**/IN WCHAR DestinationDriveLetter, /* HACK HACK! */
/**/IN PCWSTR SelectedLanguageId, /* 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); IN PREGISTRY_STATUS_ROUTINE StatusRoutine OPTIONAL);
/* EOF */ /* EOF */

View file

@ -616,7 +616,7 @@ ResolveArcNameNtSymLink(
DirectoryHandle, DirectoryHandle,
NULL); NULL);
Status = NtOpenSymbolicLinkObject(&LinkHandle, Status = NtOpenSymbolicLinkObject(&LinkHandle,
SYMBOLIC_LINK_ALL_ACCESS, SYMBOLIC_LINK_QUERY,
&ObjectAttributes); &ObjectAttributes);
/* Close the \ArcName object directory handle */ /* Close the \ArcName object directory handle */
@ -632,8 +632,9 @@ ResolveArcNameNtSymLink(
/* Reserve one WCHAR for the NULL-termination */ /* Reserve one WCHAR for the NULL-termination */
NtName->MaximumLength -= sizeof(UNICODE_NULL); NtName->MaximumLength -= sizeof(UNICODE_NULL);
/* Resolve the link */ /* Resolve the link and close its handle */
Status = NtQuerySymbolicLinkObject(LinkHandle, NtName, NULL); Status = NtQuerySymbolicLinkObject(LinkHandle, NtName, NULL);
NtClose(LinkHandle);
/* Restore the NULL-termination */ /* Restore the NULL-termination */
NtName->MaximumLength += sizeof(UNICODE_NULL); NtName->MaximumLength += sizeof(UNICODE_NULL);
@ -650,7 +651,6 @@ ResolveArcNameNtSymLink(
NtName->Buffer[NtName->Length / sizeof(WCHAR)] = UNICODE_NULL; NtName->Buffer[NtName->Length / sizeof(WCHAR)] = UNICODE_NULL;
} }
NtClose(LinkHandle);
return Status; return Status;
} }

View file

@ -21,7 +21,7 @@
* PROJECT: ReactOS text-mode setup * PROJECT: ReactOS text-mode setup
* FILE: base/setup/usetup/usetup.c * FILE: base/setup/usetup/usetup.c
* PURPOSE: Text-mode setup * PURPOSE: Text-mode setup
* PROGRAMMER: Casper S. Hornstrup (chorns@users.sourceforge.net) * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net)
* Hervé Poussineau (hpoussin@reactos.org) * Hervé Poussineau (hpoussin@reactos.org)
*/ */
@ -4300,15 +4300,11 @@ RegistryPage(PINPUT_RECORD Ir)
MUIDisplayPage(REGISTRY_PAGE); MUIDisplayPage(REGISTRY_PAGE);
Error = UpdateRegistry(USetupData.SetupInf, Error = UpdateRegistry(&USetupData,
&USetupData,
RepairUpdateFlag, RepairUpdateFlag,
PartitionList, PartitionList,
DestinationDriveLetter, DestinationDriveLetter,
SelectedLanguageId, SelectedLanguageId,
USetupData.DisplayList,
USetupData.LayoutList,
USetupData.LanguageList,
RegistryStatus); RegistryStatus);
if (Error != ERROR_SUCCESS) if (Error != ERROR_SUCCESS)
{ {