Ports back:
partially 0.4.15-dev-8109-g d7be7486c9 [SHELL32] RC: Fix some FIXMEs (#6861), leaving out the comments
0.4.15-dev-8106-g a549a9d8e4 [SHELL32] ro-RO.rc Improvement (#6844)
0.4.15-dev-8021-g 7ce96fd364 [SHELL32] Fix keyboard navigation in file deletion dialog CORE-19564 (#6833)
partially 0.4.15-dev-7877-g e85ef799fe [SHELL32] Update Romanian (ro-RO) translation (PR6657)
0.4.15-dev-7842-g 558ab78fc5 [SHELL32] *.rc: Strip all unneeded WS_DISABLED in dlg style (#6675)
0.4.15-dev-7834-g 00c4b3d99f [SHELL32] *.rc: Anonymize the "LIST2" control in IDD_AUTOPLAY1 (#6672)
0.4.15-dev-7260-g 1061ed4d28 [SHELL32] *.rc 640x480-ify IDD_FOLDER_OPTIONS_* (#6165) CORE-1762
0.4.15-dev-3170-g e34a799f0c [BOOTDATA] Fix "DllName" casing.
0.4.14-dev-1487-g c0d5e4fd6b [SHELL32] CORE-16895 RC IDD_FOLDER_OPTIONS_FILETYPES All langs
0.4.14-dev-69-g 5d7ae44059 [SHELL32] Demote an ERR to WARN (which was a tiny part of PR1907) which actually started to spam with zipfldr-introducation already
This backport focuses mainly on porting back the updates dimensions for folder-options-dlgs.
Delete FCIDM_SHVIEW_COPYTO & FCIDM_SHVIEW_MOVETO (fixes accelerator collisions in es-ES) and
IDS_ADVANCED_NET_CRAWLER & IDS_ADVANCED_WEB_VIEW_BARRICADE and IDS_EFI_FILE
because all of that is unimplemented in the older versions, and I do not intend to port any of that back ever.
Binary size of shell32.dll shrinks for all branches:
shell32.dll master RosBEWin2.2.2 GCC8.4.0 dbg x86 10.631.168 (0.4.15-dev-8027-g565a4b3)
shell32.dll releases/0.4.14 RosBEWin2.2.2 GCC8.4.0 dbg x86 9.201.664 -> 9.188.352
shell32.dll releases/0.4.14 RosBEWin2.1.6 GCC4.7.2 dbg x86 9.230.336 -> 9.216.512
shell32.dll releases/0.4.13 RosBEWin2.1.6 GCC4.7.2 dbg x86 9.086.976 -> 9.073.664
shell32.dll releases/0.4.12 RosBEWin2.1.6 GCC4.7.2 dbg x86 9.031.680 -> 9.018.368
shell32.dll releases/0.4.11 RosBEWin2.1.6 GCC4.7.2 dbg x86 8.954.880 -> 8.942.592
shell32.dll releases/0.4.10 RosBEWin2.1.6 GCC4.7.2 dbg x86 8.945.152 -> 8.932.352
shell32.dll releases/0.4. 9 RosBEWin2.1.6 GCC4.7.2 dbg x86 8.618.496 -> 8.607.744
shell32.dll releases/0.4. 8 RosBEWin2.1.6 GCC4.7.2 dbg x86 8.536.576 -> 8.528.896
shell32.dll releases/0.4. 7 RosBEWin2.1.6 GCC4.7.2 dbg x86 8.466.944 -> 8.459.776
Since the w32timesvc was introduced in 0.4.13-dev-618-g e4898e6e0b
we had several problems:
The first problem was when leaving ros running for a few days in bootcd, when the timesvc did trigger
a timesync, then the systems clock became offsync by exactly one hour (tested with Berlin timezone).
This could theoretically be improved a little bit but not fixed entirely by:
0.4.15-dev-2273-g c449929fef CORE14658 [NTOS:EX] Use RtlCutoverTimeToSystemTime to determine the current time zone id
I did *not* port back that commit here.
------
But we had other issues as well, for example there was a crash of the timesvc during 2nd-stage-setup-timesyncing
which was invisible to the users eyes (symptom-free) under normal conditions but which could be made reproducible with DPH. CORE-18922
That's due to the service missing data in the registry that early which is only written there at some later point in time.
In master we fixed that crash properly by
0.4.15-dev-2112-g 7320c989fe and its addendum
0.4.15-dev-2355-g af9df93274
but even then the timesvc did not do anything sane yet during 2nd stage setup.
That would require even more changes on top -> changing the order in which stuff is executed.
Therefore I did *not* port back the two commits above, but instead I decided to
switch the services startup-setting to 'manual' as a workaround (which is not what Windows does),
but it is sufficient for now to avoid the 2nd-stage-setup-crash.
If anybody would decide to follow the master footsteps later more closely (by taking the 3 commits instead)
he should be aware that even in todays master-head-state (2024-04-07) the timesvc negatively interferes when
the system is running while a switch to DST or back from DST is happening. We do set the wrong clock then.
Therefore I feel much safer with setting the Service to manual in the older releases, so that the
user explicitly has to OPT-IN if he intends to test this service. Instead of getting disturbed in the default shipment by its misbehavior.
This workaround is abusing the fact that the user has the ability to OPT-IN via servman only after 2nd stage was completed already.
I tested: The service can still be started via servman in bootcd and LiveCD even with this workaround after 3rd-stage-bootup.
-------
Some more thoughts: Manual NTP-update via the timedate.cpl button can be invoked still,
that does work even without the service, and has an effect on the clock.
But it *does not work properly for me in the bootcd* (although we do properly have the 'automatically adjust DST checkmark set' and the correct timezone is set also for me "Berlin"),
I can still make the clock going off-by-one here sometimes. With and without the 3 commits mentioned above.
It *works even worse in LiveCD*, where that auto-DST-checkmark is not set, and where also the time-zone is not yet set correctly to for me to "Berlin",
but instead to GMT-12:00.
Even if I correct the timezone manually and set the checkmark, I can still get an offby-one-hour when manually invoking the DST update in LiveCD.
Still a lot needs to be done in this context. Therefore we shouldn't disturb the user too much with non-working-automatisms yet.
I will not look into these issues again, until I will find the master to have reached an acceptable state in this context.
It most likely makes sense to first make the checkbox and the timezone correct in the LiveCD before addressing the rest.
I did these tests on 2024-04-07, that means we do have DST-enabled in Germany (summertime).
-------
Side-note:
I considered also disabling the auto-NTP-time-sync-feature in datetime.cpl in the older branches, but
decided against it to not harm the tools use on real MS Windows.
0.4.15-dev-5102-g 18d40ebe81 [BOOTDATA] hivesys.inf: Remove redundant fastfat "Start" entry. The one in the [AddReg] section has the very same value.
-------
0.4.15-dev-5012-g e3f8f52f3d [BOOTDATA] Delete "Layout Id" from Japanese/Korean Keyboard Layout
Katayama explained: These registry values are for pre-installed IMEs we don't have. It is safe to remove them also in the older branches.
-------
0.4.15-dev-4352-g cfe387a9b0 [BOOTDATA] Add two missing separating commas in the ServiceGroupOrder List multi-string.
-------
PARTIALLY PICK: 0.4.15-dev-4412-g 94d144f8a5 [BOOTDATA] Fix some services groups
- AudioSrv belongs to "AudioGroup" (and not "Audio" that doesn't exist).
- lanmanworkstation belongs to "NetworkProvider" (without a space).
I dared only to pick the "NetworkProvider" and "AudioGroup" part for now. The MUP part I might do later when actually being able to retest CORE12107 "VMWare tools" myself.
-------
0.4.15-dev-1097-g 0689455bb3 [BOOTDATA] Comment out biosinfo.inf (#3266)
This allows ros to boot with its LiveCD files using MS NTLDR!
I stripped the line here, instead of commenting it as the master commit did. The file does not exist.
-------
Additionally to those backports I cleaned up some of the stuff that was previously commented out and/or broken:
- instead of following 0.4.15-dev-3322-g c6e002bfb3 to fix the Latvian kbdlv1.dll QUERTY->QWERTY typo, I just stripped those lines, as
they are commented out anyway. And were added in the broken and already commented way by 0.4.9-dev-825-g c2089d5319
We never had them active. No such file even.
- Also strip some 'translated' service strings that were just copy-pasted from the english strings section
without actually getting translated at all. The english ones will be used anyway.
It is enough to have that redundant stuff in master to allow translators to see it.
- Also strip the disabled kbdfo.dll Faeroese keyboard layout. Enough to have those commented lines in master as a TODO reminder. Was never active ever. No such file even.
- Also strip the disabled BENGALI_INSCRIPT kbdinben.dll. Where the existing lines even had bugs in the older branches as proven by 0.4.15-dev-3322-g c6e002bfb3
It was always disabled and was neither localizable, nor did it have the correct layout code even. No such file even.
None of those changes will introduce any additional diff or break any existing features.
They just slightly move the already existing diffs position in time towards newer release-branches.
Switches from "FreeMono" and "Dejavu Sans Mono" to "Courier New" and "Lucida Console"
and therefore brings us closer to 2k3sp2 stock fonts. Saves some RAM also.
Deletes some "Ubuntu" font left-overs in some Themes.
CORE-18605 (and partially CORE-16264)
By porting back the following commits:
0.4.15-dev-5362-g c47758b102 [SETUP][INF][MEDIA] Get rid of the last Ubuntu references CORE-18607 (#4871)
0.4.15-dev-5336-g bd40c13f6f [SETUP][BOOTDATA][FONTS][INF] Delete DejaVu Sans Mono and re-map (#4856)
0.4.15-dev-5335-g a4193ade03 [SETUP][FONTS][INF][GDI32_APITEST] Delete FreeMono and re-map (#4852)
0.4.15-dev-5324-g d035452148 [SETUP][INF][ROSTESTS] Delete font substitutions and tests for "DejaVu Sans" (#4829)
See https://reactos.org/wiki/ReactOS_Foundation for more information.
the first part of CORE-18191
picked from 0.4.15-dev-4866-g 6881d8c624
Respect:
-Colins wish to leave out for now all the matches in kbdtool for legal uncertainty
-boot_images.cmake on master vs. boot/CMakeLists.txt in older branches
-treating cpu.inf special in this first commit for the sake of keeping sync to all other infs
-unlike master I decided to groom also cdmake, because I don't see any reason yet to dump that
in the older branches
-all releases down to releases/0.4.7 were released for the first time after the "ReactOS foundation"
dissolved already in 2015. So all are definitely fine to receive this commit.
-port back some EOL whitespace fixes as well in common.ver to sync the file to 100% to master head
Although the new layout that I committed in the previous commit
was favored by community ratings votes 8:0,
some devs still preferred the old layout with the bigger logo
because they liked the easteregg. So this commit restores
that.
But it syncs to that features latest&greatest implementation
we have in 0.4.15-dev-1685-gd0c237a instead of reverting the
previous commit to not unnecessarily have many bugs with it
that were still affecting the older releases beforehand.
Aside from the general tabs dialogs layout this commit does
also fix some minor issues in the translations for the oldest
branches in pl-PL, jp-JA, zh-CN and zh-TW.
And it fixes an x64 issue in general.c for 0.4.7 and 0.4.8.
The version string cutoff started to happen when we switched from SVN
with its short revision number to git with the longer hashes.
0.4.7-dev-502-gc2c66af was the first git-only rev (2017-Oct-03)
and brings the dialogs layout closer to XP.
Also fixes some other truncations for specific languages.
And unifies the touched text controls sizes for all languages.
The credits have been moved to readme.txt where they are more present and
we can avoid having to groom all languages files each time we want to add
a new dev (and sysdm.cpl to grow each time). Less maintenance.
sysdm.cpl binary size I18N=all
master before 925.696bytes after 705.024bytes gcc 8.4.0 dbg RosBE2.2.1
0.4.14 before 923.136bytes after 702.464bytes gcc 8.4.0 dbg RosBE2.2.1
0.4.13 before 904.192bytes after 684.544bytes gcc 4.7.2 dbg RosBE2.1.6
0.4.12 before 881.664bytes after 665.600bytes gcc 4.7.2 dbg RosBE2.1.6
0.4.11 before 836.096bytes after 618.496bytes gcc 4.7.2 dbg RosBE2.1.6
0.4.10 before 806.912bytes after 588.800bytes gcc 4.7.2 dbg RosBE2.1.6
0.4. 9 before 788.480bytes after 585.728bytes gcc 4.7.2 dbg RosBE2.1.6
0.4. 8 before 788.480bytes after 585.728bytes gcc 4.7.2 dbg RosBE2.1.6
0.4. 7 before 788.992bytes after 585.728bytes gcc 4.7.2 dbg RosBE2.1.6
readme.txt still fits into a single NTFS cluster afterwards with 3702bytes
Also a very! soft update of some translations ported back.
Thanks to Jim Tabor, Mark Jansen & Thomas Faber
By squashed backmerge of the following commits:
--------------
[NTUSER] Fix Strings and Format to Hooks
Allocate heap instead of data segment to be used for callbacks on user side.
Move and correct initial hook call out setup. Use it in more than one hook call.
This fixes issues with strings out of alignment and use of kernel pointers.
See CORE-13907 and CORE-16769. KsStudio still needs retested.
Small wow update.
cherry picked from commit 0.4.14-dev-1287-g
568b6d0558
--------------
[RTL] Introduce RtlpImageNtHeader,
which implements the required functionality.
ntdll and ntoskrnl now have a wrapper for this, with SEH.
This protects the function against malformed / bad images,
whilst still being able to use the code in freeldr et al.
Idea from Thomas.
CORE-14857
cherry picked from commit 0.4.14-dev-1255-g
177ae91bf6
--------------
[WIN32SS] Form Sanity to Hook Callbacks
Fix WH_CALLWNDPROC/RET data to user hook calls. See CORE-13019 and CORE-13907.
cherry picked from commit 0.4.14-dev-1241-g
915a5764a9
--------------
[USER32] Fix null return.
See CORE-16769.
cherry picked from commit 0.4.14-dev-1240-g
d8add40e89
By using the capabilities created in CORE-16631.
This will fix many crash-regressions in apps that have "Vista+ready"-manifests.
A good default setting for releases to protect "average Joe".
We think that's a tolerable balance.
E.g: This will fix CORE-16700 and CORE-16707 for releases.
The reason for those crashes is that we have far too many gaps in our apisets still.
Adventurous users have two options in releases if they want to expose more apisets
(and additional crashes when apisets are not implemented yet):
1.) change registry setting "HKLM\SOFTWARE\Policies\Microsoft\Windows\AppCompat" "DisableCompatGuidDetection" back to 0
to switch the global behavior to act like master-state (== opt-out)
or
2.) Select the "Windows 7" shim for example individually per app for more apiset exposure.
(more safe)
Contrary master will remain affected by such crashes and users will
have to manually apply shim "IgnoreManifestCompatVersion" on each affected app for opt-out,
as we intend to abuse master as a testing platform to spot gaps in apisets and problematic apps more quickly.
Thanks to Mark Jansen for having implemented that flexibility.
This prevents ReactOS asserting when 'My computer'
is opened, while it tries to send commands to floppy drive.
Many thanks to patches author Doug Lyons.
The regression was introduced by 0.4.13-dev-1081-g
eeff926ede
patch was not committed to master yet,
hbelusca continues investigation
Do not read the whole cluster chain for file on opening.
This removes restriction for opening files which span
within a large amount of clusters (>65k). That happened because
FrLdrTempAlloc cannot allocate more than about 256 KiB of memory.
Adjacent clusters for file are now read using one disk driver call.
Add localization for the file description of both XML and XSL file formats.
Please check for copypasta errors!
CORE-16390
Co-Authored-By: Stanislav Motylkov <x86corez@gmail.com>
According to the Advanced RISC Computing Specification v1.2, for partitions,
StartingAddress and EndingAddress are the start and end positions of the
partition in terms of byte offsets from the start of the disk.
CurrentAddress is the current offset into (i.e. relative to) the partition.
Fix also the FAT filesystem in accordance.
- FIXME fix: Retrieve the size of the disk in number of sectors in DiskOpen().
- Add extra validity checks in the DiskSeek() functions.
- Explicitly call PcDisk* functions in machpc.c and pcdisk.c, and
XboxDisk* functions in machxbox.c (the code in these files is not
called cross-platform).
CORE-16216 CORE-16248
- Modify DiskReportError() to use an internal "display counter", so that
imbricated DiskReportError(FALSE) ... DiskReportError(TRUE) can behave
as expected.
- Merge LoadAndBootDrive(), LoadAndBootPartition(),
LoadAndBootBootSector() into one LoadAndBootDevice() function + its
helpers (in progress...).
- "FrldrBootPath" -> "FrLdrBootPath";
- Get rid of GetFreeLoaderVersionString() and use FrLdrVersionString
directly instead;
- Rephrase some comments;
- Use RTL_NUMBER_OF();
- Reduce indent level in LoadOperatingSystem() and EditOperatingSystemEntry().
Bug fix:
- Fix DissectArcPath() for "ramdisk(0)" case.
- Move DiskStopFloppyMotor() calls into the implementations of
Boot(New)LinuxKernel() and Reboot() HW functions, and the explanation
comments in ChainLoadBiosBootSectorCode().
- Remove unneeded DiskStopFloppyMotor() dummies in ARM and PPC code.
- Use more adequate bitmask value to be sent to floppy's Digital Output
Register for shutting down its motor (based on OSDev & our floppy
controller driver).
- Add optional arguments BootDrive and BootPartition to
ChainLoadBiosBootSectorCode() so as not to modify explicitly the
FrldrBootDrive and FrldrBootPartition variables, that should remain
purely internal.
- Implement ChainLoadBiosBootSectorCode() for x64.
- Get rid of the machine-specific DiskGetBootPath(), and instead do its
job only once in the machine-specific InitializeBootDevices() (or in
MachInit() for PPC).
Cache the result of this operation into the globally-accessible
FrldrBootPath buffer. This avoids the unneeded calls to (Mach)DiskGetBootPath()
we used to do before.
Also remove the separate distinction between the PC and XBOX versions
of this functionality.
- Move the PC-specific DiskIsDriveRemovable() and DiskGetBootPath()
as well as the disk-IO-error functionality, back into the
corresponding PC-arch files.
- Simplify IniFileInitialize(), getting rid of IniOpenIniFile().
CORE-9023
FIXES:
======
- Fix parsing of the multiboot options string.
NOTE: They are not yet treated in a case-insensitive manner!
- Fix a bug in ArcOpen() so that it correctly skips the first path
separator (after the adapter-controller-peripheral ARC descriptors).
The path separator can be either a backslash or a slash (both are
allowed according to the specs); they were also already handled
correctly in other parts of the code.
- Fix DissectArcPath() so as to:
* **OPTIONALLY** (and not mandatorily!) return the path part that follows
the ARC adapter-controller-peripheral elements in the ARC path;
* make it correctly handle the (yes, optional!!) partition() part in the
ARC path, for the multi(x)disk(y)rdisk(z) cases.
ENHANCEMENTS:
=============
- Directly retrieve the default OS entry as we enumerate them and
build their list (i.e. merge the GetDefaultOperatingSystem() helper
within InitOperatingSystemList()).
- Directly use the opened 'FreeLoader' INI section via its ID in the
different functions that need it.
- Make the custom-boot and linux loaders honour the boot options they are
supposed to support (see FREELDR.INI documentation / template).
This includes the 'BootDrive' and 'BootPartition' (alternatively the ARC
'BootPath').
This also allows them to take into account the user-specified choices in the
FreeLdr custom-boot editors.
- Modify the FreeLdr custom-boot editors so as to correctly honour
the priorities of the boot options as specified in the FREELDR.INI
documentation / template.
- Use stack trick (union of structs) to reduce stack usage in the
FreeLdr custom-boot editors, because there are strings buffers that are
used in an alternate manner.
- Extract out from the editors the LoadOperatingSystem() calls, and
move it back into OptionMenuCustomBoot(), so that when this latter
function is called there is no risk of having a stack almost full.
- When building the ARC-compatible argument vector for the loaders, add
the mandatory "SystemPartition" path. This allows the loaders to NOT
call the machine-specific MachDiskGetBootPath() later on (this data is
indeed passed to them by the boot manager part of FreeLdr).
- Improve the FsOpenFile() helper so as to make it:
* return an adequate ARC_STATUS instead of a mere uninformative BOOLEAN;
* take open options, as well as a default path (optional) that would be
prepended to the file name in case the latter is a relative one.
- Make RamDiskLoadVirtualFile() return an actual descriptive ARC_STATUS
value, and make it take an optional default path (same usage as the one
in FsOpenFile() ).
+ Remove useless NTAPI .
- UiInitialize() and TuiTextToColor(), TuiTextToFillStyle(): load or
convert named settings into corresponding values using setting table and
a tight for-loop, instead of duplicating 10x the same parameter reading
logic.
- UiInitialize(): Open the "Display" INI section just once. Remove usage
of DisplayModeText[] buffer.
- UiShowMessageBoxesInSection() and UiShowMessageBoxesInArgv(): reduce
code indentation level.
ENHANCEMENTS for NT OS loader:
==============================
- Don't use MachDiskGetBootPath() but use instead the "SystemPartition"
value passed via the ARC argument vector by the boot manager
(+ validation checks). Use it as the "default path" when calling
FsOpenFile() or loading the ramdisk.
- Honour the FreeLdr-specific "Hal=" and "Kernel=" options by converting
them into NT standard "/HAL=" and "/KERNEL=" options in the boot
command line.
Note that if the latter ones are already present on the standard "Options="
option line, they would take precedence over those passed via the separate
"Hal=" and "Kernel=" FreeLdr-specific options.
Also add some documentation links to Geoff Chappell's website about
how the default HAL and KERNEL names are chosen depending on the
detected underlying platform on which the NT OS loader is running.
This fixes null pointer call bug, which was revealed in 85d44fc. Spotted by Mark Jansen. CORE-16216
Co-authored-by: Mark Jansen <mark.jansen@reactos.org>
Rename RosAudioSrv to AudioSrv in audio service itself and in all system components which are related to this, same as it done in Win2k3.
It allows MS DxDiag to detect the system audio service correctly, so it becomes possible to run DirectSound test properly with MS dsound.dll, although it works with some minor errors and only in older VirtualBox versions, ~ up to 5.1.38 (and in other emulators as well).
CORE-16307
- Create xbox.cmake based on legacy.cmake and pic.cmake
- Revive Xbox HAL files and add them to the build
- Fix boot with Xbox HAL, add missing parts from halinit_up.c
- Code style and debug logging improvements in pcibus.c
- Allow to choose Xbox HAL in usetup
CORE-16216