mirror of
https://github.com/reactos/reactos.git
synced 2025-06-12 08:28:32 +00:00
[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:
parent
13998a15c9
commit
1b0c26e21c
4 changed files with 16 additions and 27 deletions
|
@ -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;
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue