diff --git a/reactos/base/setup/usetup/interface/usetup.c b/reactos/base/setup/usetup/interface/usetup.c index 717bad1cd03..b1a09be80dc 100644 --- a/reactos/base/setup/usetup/interface/usetup.c +++ b/reactos/base/setup/usetup/interface/usetup.c @@ -70,6 +70,8 @@ static UNICODE_STRING DestinationPath; static UNICODE_STRING DestinationArcPath; static UNICODE_STRING DestinationRootPath; +static WCHAR DestinationDriveLetter; + /* Path to the active partition (boot manager) */ static UNICODE_STRING SystemRootPath; @@ -1589,6 +1591,8 @@ SelectPartitionPage(PINPUT_RECORD Ir) TRUE); } + DestinationDriveLetter = (WCHAR)PartitionList->CurrentPartition->DriveLetter[0]; + return SELECT_FILE_SYSTEM_PAGE; } else if (Ir->Event.KeyEvent.wVirtualKeyCode == 'C') /* C */ @@ -3335,6 +3339,9 @@ RegistryPage(PINPUT_RECORD Ir) return QUIT_PAGE; } + /* Set the default pagefile entry */ + SetDefaultPagefile(DestinationDriveLetter); + /* Update the mounted devices list */ SetMountedDeviceValues(PartitionList); diff --git a/reactos/base/setup/usetup/registry.c b/reactos/base/setup/usetup/registry.c index 0ae7ab72817..493a17a4a83 100644 --- a/reactos/base/setup/usetup/registry.c +++ b/reactos/base/setup/usetup/registry.c @@ -763,4 +763,38 @@ SetMountedDeviceValue(CHAR Letter, ULONG Signature, LARGE_INTEGER StartingOffset return TRUE; } + +VOID +SetDefaultPagefile(WCHAR Drive) +{ + OBJECT_ATTRIBUTES ObjectAttributes; + UNICODE_STRING KeyName = RTL_CONSTANT_STRING(L"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Memory Management"); + UNICODE_STRING ValueName = RTL_CONSTANT_STRING(L"PagingFiles"); + WCHAR ValueBuffer[] = L"?:\\pagefile.sys 0 0\0"; + HANDLE KeyHandle; + NTSTATUS Status; + + InitializeObjectAttributes(&ObjectAttributes, + &KeyName, + OBJ_CASE_INSENSITIVE, + NULL, + NULL); + Status = NtOpenKey(&KeyHandle, + KEY_ALL_ACCESS, + &ObjectAttributes); + if (!NT_SUCCESS(Status)) + return; + + ValueBuffer[0] = Drive; + + NtSetValueKey(KeyHandle, + &ValueName, + 0, + REG_MULTI_SZ, + (PVOID)&ValueBuffer, + sizeof(ValueBuffer)); + + NtClose(KeyHandle); +} + /* EOF */ diff --git a/reactos/base/setup/usetup/registry.h b/reactos/base/setup/usetup/registry.h index 0d62ac9c25b..2b23cd8d33d 100644 --- a/reactos/base/setup/usetup/registry.h +++ b/reactos/base/setup/usetup/registry.h @@ -38,4 +38,7 @@ SetInstallPathValue(PUNICODE_STRING InstallPath); BOOLEAN SetMountedDeviceValue(CHAR Letter, ULONG Signature, LARGE_INTEGER StartingOffset); +VOID +SetDefaultPagefile(WCHAR Drive); + /* EOF */