Reject malformed DHCP subnet mask and router option lengths
before setup_adapter() consumes them.
This prevents attacker-controlled option lengths from expanding DHCP
option bytes into a fixed stack buffer while preserving valid
router address lists.
Validate the option lengths before use, keep router lists limited to
complete IPv4 addresses, and format registry IPv4 strings with
RtlIpv4AddressToStringA().
Booted amd64 QEMU image: no DHCP/client networking regression observed.
- Tweak the dimensions of the read-only editboxes.
- Tweak the Confirmation checkbox: adjust its dimensions, remove some
artificatial newlines, and adjust the wording in some translations.
- Support double-clicking on the Installation type page radio buttons.
The Installation type page offers two self-excluding options:
"Install ReactOS", and "Upgrade an existing ReactOS installation",
and no other controls are available (except for the wizard navigation
buttons). Thus, we can implement the UI feature of supporting double-
clicked radio buttons as an abbreviation for "select + Next".
For this, add the `BS_NOTIFY` style to both radio buttons, so as to
receive the `BN_DBLCLK` notification via the `WM_COMMAND` message.
Based on a suggestion by Raymond Chen,
https://devblogs.microsoft.com/oldnewthing/20050804-10/?p=34713
- Ensure the correct radio button is selected when activating the
Installation type page:
ensure the "Install ReactOS" radio button is checked if we don't have
a selected installation (default case), which can also happen if the
user clicked on the "Do not upgrade" button on the Upgrade/Repair
selection page, then went back.
- In the Upgrade/Repair selection page, go to the next page if the user
double-clicked on a listed installation.
- In the Drives/Partitions page:
* support pressing DELETE key to delete an existing partition;
* support pressing ENTER key to install ReactOS on a eligible
partition;
* enable the "Create" partition button only if the selected disk region
is not partitioned, and can be partitioned according to the disk's
partitioning scheme (e.g. for MBR disks, no more than 4 primary
partitions).
- Explicitly check for `BN_CLICKED` notification when handling
single-click on standard push-buttons.
- Return TRUE explicitly from `WM_COMMAND` in the _dialog_ procedures
when the message is handled and no extra default processing is needed.
- Reduce some extra indentation when possible.
- Move `ExpandInstallerPath()` from userinit.c to livecd.c, and update
its SAL2 annotations and Doxygen comment.
- Make `StartInstaller()` directly use the cached ReactOS installer path.
- This avoids invoking yet again `ExpandInstallerPath()` when trying to
locate the installer also for the aim of determining whether to disable
the "Install" button.
Use the standard way of checking for the existence of
the `HKLM\SYSTEM\CurrentControlSet\Control\MiniNT` key.
Addendum to commits 8fabb29ed9 and 9fa8028ae4.
Remove a deprecated ERROR_FIND_SETUPDATA, which was supposed
to be removed in a7afba7703,
however it was skipped probably due to broken encoding.
Noticed in 7090cf7ebc / 7f7df51c62.
Since the database is downloaded lazily, clicking on "Update Database"
button won't re-download the online catalog if "Available apps" view is
not active. This patch forces the download even when the "Installed apps"
is active.
CORE-20205
Updating keyboard layout settings with user-overridden values, was
restricted to non-unattended setups, in an apparent attempt to fix
in commit 829b0c63d9 (r38146) the problem reported at CORE-3634.
This special-casing is now unnecessary.
For example, when installing ReactOS in French, this selects the French
keyboard layout as default, while keeping English installed but not
activated.
This is partly a "hack", and adapts the existing solution chosen in USETUP.
A better fix will be done in the future.
- Improve install abort on errors;
- Wait for the install thread to finish within the page that created it;
- Display the hourglass cursor while waiting for the thread.
- Ensure the wizard gets shown, centered on the screen, and focused,
when the Finish page is reached.
- Trigger the change of the "Cancel" wizard dialog button text, not
from the `WM_INITDIALOG` page handler, but from `PSN_SETACTIVE`.
- Add a `PSN_KILLACTIVE` handler to kill the timer initialized in
the `PSN_SETACTIVE` handler.
- Add a `PSN_WIZBACK` handler to disable going back in the wizard.
- Store the wizard page descriptors in a separate static array.
Then loop over these descriptors to create each page.
- Set the window small icon.
- Add a property sheet callback to set the window large icon (and not
a rescaled small icon!) from the `PSCB_INITIALIZED` notification.
Also, handle the `PSCB_PRECREATE` notification, and subclass the
property sheet window procedure, so as to be able to initially center
the wizard window while keeping it hidden before showing it,
independently of which wizard page is going to be initially shown.
A small hack for handling the `DM_REPOSITION` message is added,
because Wine's comctl32 propsheet.c doesn't send the message after
creating, initializing and resizing the property sheet dialog...
- drivepage.c:
* Move some local loop variables inside their loop block.
* Move the core of the Drives/Partitions dialog `PSN_WIZNEXT` handler
into a separate function.
- reactos.c:
* Move some `break;` into their corresponding `case` blocks.
* Replace remaining `EnableWindow(GetDlgItem(...), ...)` instances
with `EnableDlgItem(...)`.
* Introduce `hWndParent` variables in some routines, so as not to
invoke `GetParent(hwndDlg)` repeatedly.
* Use NULL for default "Error" message-box title.
* Remove an empty `case WM_DESTROY` in `FinishDlgProc()`.
- Use explicit Unicode property-sheet structures.
- Update the copyright notice dates. Fix the file header in drivepage.c.
Add the missing file header into reactos.rc.
- Fix TAB order in the Installation type page.
- Don't systematically set focus to the "Install ReactOS" radio-button.
Always resetting the focus to the "Install" choice is unwanted,
because, if the user instead selects "Upgrade", goes to the next
"Upgrade/Repair" page, then goes back to the installation type page,
the selection focus wouldn't be on what the user previously chose,
but would instead be on the "Install" choice, while the "Upgrade"
choice would stay checked, thus leading to an inconsistency.
We want instead the selection to stay as the user previously chose,
without changing it.
- Correctly handle item selection change in the Installations list,
so that only the "selected" state change is detected and UI buttons
are updated accordingly.
When the `PSN_QUERYINITIALFOCUS` notification is received (whenever
the page is made active), reselect the currently-selected item so as
to properly update the UI buttons.
- Add missing keyboard accelerators in the Devices selection page.
- Group all the push-buttons together in the Drives/Partitions page,
so that when the focus is on the first one and the user presses the
Left-arrow key, the focus stays on the buttons and doesn't go to the
partitions list.
- Remove the `PSN_QUERYINITIALFOCUS` hack in the Drives/Partition page
dialog procedure (see commit 6cb1394bb1, PR #9272).
- Correctly handle item selection change in the Drives/Partition list,
so that only the "selected" state change is detected and UI buttons
are updated accordingly.
When the `PSN_QUERYINITIALFOCUS` notification is received (whenever
the page is made active), reselect the currently-selected item so as
to properly update the UI buttons.
- Remove redundant `WS_VISIBLE` style for all the Edit-text fields of
the Summary page.
- In the Start/Welcome and the Finish/Abort pages: when disabling the
wizard "Back"/"Next" navigation buttons with `PropSheet_SetWizButtons()`,
for the purpose of hiding them next, do *NOT* use that macro, because
it posts the `PSM_SETWIZBUTTONS` message instead of sending it, and so,
it would be handled after hiding the buttons. The message would then
interfere with the hidden buttons (when both "Back" and "Next" are
hidden, "Next" gets forcefully shown).
- Set the default button to "No" for some confirmation dialogs
(setup abort; partition deletion; ...).
- Move around the status items static controls.
- Bolden the main status label.
- Whereas the repair/upgrade procedure may move, rename, or delete files,
the regular installation only copies files. Therefore, display only the
file name instead of the full "Copying..." message in this case.
(Based upon a suggestion by Carl Bialorucki.)
CORE-20447
Remove the `TVS_EDITLABELS` window style from the tree view control of the `SYSTEM.INI`/`WIN.INI` tabs, making the labels read-only as intended.
This prevents the UI from opening an editable text box when users click or pause on tree view items, which was misleading since editing/saving here is not implemented.
Users are still able to edit configurations using the dedicated "Edit" button on the UI.
- Ensures the choice selection characters are not duplicated, this passes one extra Wine test.
- Make the choice selection characters display as uppercase when appropriate.
- Return the errorlevel.
This fixes cmd_winetest hanging on the echo Y | choice /C ABCXYZ /D A /T 2 test.
- Reads the first character from stdin if stdin is not connected to a real console.
- Ensures the timeout never goes negative if there is a problem reading stdin.
This PR implements two of the three hooks that allows you to run custom
applications during 2nd-stage setup (the 3rd hook is `...\$OEM$\Cmdlines.txt`,
but that requires file copy operations, etc.)
- `DetachedProgram` is documented[^1] for NT4...2003; it is started before
installation and `UserExecute` after.
- `UserExecute` is a great place to install VM Guest Additions, one reboot
less and you have shared folders/clipboard on the first normal boot.
[^1]: https://web.archive.org/web/20090902145959/http://technet.microsoft.com/en-us/library/cc757642(WS.10).aspx
This makes our built-in choice command compatible with how choice is implemented on NT5.2+ (it isn't included in Windows XP and below), while retaining compatibility with how it worked in DOS/9x.
- Changes /C and /T to also support the NT syntax.
- Adds the /CS, /D and /M switches.
This makes it easy for JIRA issue CORE-20043 to use this code to create a proper choice.exe
Always rounding of unzooming coordinate values had caused
display glitch (e.g. black line on top edge in zooming).
JIRA issue: CORE-19466
- Add bRound parameter to UnZoomed function. If bRound is
TRUE, then do round by kernel32!MulDiv function.
Otherwise don't round.
- Add bRound parameter to CCanvasWindow::CanvasToImage.
- Make bRound = FALSE default.
- Use bRound = TRUE for CCanvasWindow::OnButtonDown,
CCanvasWindow::OnButtonDblClk,
CCanvasWindow::OnMouseMove, and CCanvasWindow::OnButtonUp.
Support drawing with dithering on
monochrome palette mode.
JIRA issue: CORE-15990
- Enhance drawing routines for
dithering in drawing.cpp.
- Add VirtualBrush class to the
tools model in order to virtualize
the drawing colors.
- Move PaletteModel::CreateDitherBrush
to drawing.cpp ::CreateDitherBrush.
Co-authored-by: Hermès BÉLUSCA - MAÏTO <[email protected]>
This function has an important role
for new ShellExecute implementation.
JIRA issue: CORE-19278
- Add evalcmd static library into
dll/win32/shell32/evalcmd.
- Implement
SHEvaluateSystemCommandTemplate
in evalcmd.
- Link evalcmd to shell32 and shlwapi.
- Modify shell32.spec and shlwapi.spec.
- Add prototype to <shellapi.h>.
- Add
SHEvaluateSystemCommandTemplate
testcase.
- Define PathIsAbsolute inline
function in <shlwapi_undoc.h>
and use it.
Scrolling the canvas with mouse
wheel was a hard work, due to
small scroll amount.
JIRA issue: CORE-19466
- Adjust the scroll amount from 5
to 15 in CCanvasWindow::OnHVScroll.
Co-authored-by: Hermès BÉLUSCA - MAÏTO <[email protected]>
Co-authored-by: Stanislav Motylkov <[email protected]>