This commit implements SetSearchPathMode based on official documentations from Microsoft and Wine tests.
This is different from #3665 since it updates SearchPathW to use the configured Search Path Mode, while the older PR only introduces SetSearchPathMode with desired outputs per input. Also improves thread safety.
CORE-17586
I did notice our PCIX hack flags seem to be compatible with what windows is trying to do, I've kept that. Though I'm only really checking against modern windows here. I may reduce our flag list later, also i noticed our usage of them was a bit off in how we decode some information; This broke VGA for months in my development of this driver.
* [PCIX] Refuse to disable decodes for the devices Windows keeps decoding
* [PCIX] Let a 64-bit BAR be placed above 4GB
* [XDK] Enable the MemIo vista+ APIs we're really need
* [PCIX] Build a BAR requirement from named bounds
* [PCIX] Treat a BAR that implements no address bits as absent
With Windows 10/11 new enum fields were added to RTL_BSD_ITEM_TYPE namely RtlBsdPowerTransitionExtension, RtlBsdItemFeatureConfigurationState and RtlBsdItemRevocationListInfo.
Currently there's no information about what fields does RTL_BSD_ITEM_REVOCATION_LIST have at the moment, so it's stubbed out. RTL_BSD_DATA_POWER_TRANSITION_EXTENSION is used by RtlBsdPowerTransitionExtension that contains extended power information such as critical thermal shutdown and whatnot.
The source of these fields is from PHNT -> https://github.com/winsiderss/systeminformer/blob/master/phnt/include/ntrtl.h#L15124
That stuff is particularly useful when working futher on RSOH (the Red Screen of Hell feature) as we can use RtlGetSetBootStatusData to set the thermal condition bit and have this popup screen be displayed on next boot if the kernel finds out the system was running too hot.
Sync comdlg32 to Wine-10.0 and its tests. Additionally, a lot of reactos specific code in colordlg.c has been removed as wine has it. Enable IFileDialog interface for Windows Vista or later DLL exports.
JIRA issue: CORE-20586
This PR is a great start for a new C++ based MMC.
I have some improvements in my source tree which I want to add bit by bit.
My modifications to Marks PR are:
- Renamed ISnapInAbout to ISnapinAbout for compatibility reasons.
- Updated CMakeLists.txt
- Removed the patch to shellutils.h because it seems to already have been applied.
The root memory arbiter is the most important out of all of these. The main intention here is that there's some special ranges PCI can't ever look at it even if the firmware tries to claim it can.
This is missing a few gaps still! for example in another PR I'm going to add in the ACPI hal to reserve the ECAM space and once that is published itll also be added to the root mem arbiter.
* [ARBITER] Resolve ARBITER_RANGE_SHARED_DRIVER, fixes compat with Vista+
* [NTOS:IO] Finish the initial impl of the Root Arbiters
* [NTOS:IO][SDK] Fix RtlFindRange truncation, use the Vista+ Sig
Sync bcrypt/bcrypt winetest with latest wine. Implement all functionality with mbedtls. DSA is my implementation based on libtomcrypt implementation as mbedtls does not support DSA. All failing tests are wine_todo
* [BCRYPT] Split implementations in different files. Add internal header. Add precompiled header. These changes are needed to make bcrypt more wine compatible
* [BCRYPT] Update to latest bcrypt from wine. Add their gnutls implementation with small changes. Add missing function in the other implementations returning STATUS_NOT_IMPLEMENTED. WARNING! gnutls is modified just visually and is n ot compiled locally as we don't have gnutls in ReactOS for a long time and we depend on mbedtls implementation.
* [BCRYPT] Remove forgotten code. Remove hmac BOOL and use hash->flags for hmac
* [BCRYPT] Remove some dead code. Move flag defines in header. Use constant for flag
* [BCRYPT][WINETEST] Update bcrypt wine test to current version. On windows it executes 23114 tests successfully
* [MBEDTLS] Activate MD2 and MD4 hashing algorithms
* [MBEDTLS] Export additional MD functions
* [BCRYPT][WINETEST] Disable not implemented method tests
* [BCRYPT] Remove unneeded headers
* [BCRYPT] Fix some struct variables and add a hash method
* [BCRYPT] Update common crypto implementation
* [MBEDTLS] Expose AES CFB8
* [MBEDTLS] Export simetric encryption/decryption functions
* [BCRYPT] Implement symetric encryption/decryption
* [BCRYPT][WINETEST] Activate symetric encryption/decryption tests. From 22541 Only 3 fail on wine_todo
* [BCRYPT][WINETEST] Disable pbkdf tests. They crash calling function with ULONGLONG parameter
* [MBEDTLS] Export additional functions
* [BCRYPT] Expand private data size
* [BCRYPT] Implement asymetric encryption/decryption. NOTE: DSA is NOT supported by mbedtls, so it is not implemented here
* [MBEDTLS] Disable range check for mbedtls_dhm_calc_secret for ReactOS. It fails tests for key derivation
* [BCRYPT][WINETEST] Enable all tests
* [BCRYPT] Update exports
* [MBEDTLS] Add DSA implementation. It is my implementation based on libtomcrypt and adapted to mbedtls. It is NOT part of mbedtls!
* [BCRYPT] Implement DSA encryption/decryption. Use union for cipher/pk/dh/dsa keys to lower memory used for a key. Lower PRIVATE_DATA_SIZE accordingly.
* [BCRYPT] Fix missed cleanup on error paths. Fixed missed DSA key reinitialization. Change some error codes to STATUS_NO_MEMORY. Minor formatting
* [WINESYNC] Update bcrypt sync status
* [MBEDTLS] Fix double export and move an export for readability
* [BCRYPT] Enable ARC4 (RC4) algorithm
* [BCRYPT] Extend private data size to fit x64
* [WINESYNC] Update WINESYNC.txt to exclude commit hash
---------
Co-authored-by: Justin Miller <justin.miller@reactos.org>
Adds the initial attempt at handling the job ui restriction support. This doesn't protect the OS yet, however it provides everything we need to start implementing that protection.
Import rtworkq.dll from Wine-10.0, required for importing wine's MediaFoundation implementation. Locked behind Windows 8.1 as apps detect for the presence of this DLL.
- NDK obtypes.h: Update the names of the `OBJECT_BASIC_INFORMATION`
structure members, (undocumented by Microsoft but) de-facto documented
by Geoff Chappell[^1] and System Informer phnt headers[^2].
Make the `OBJECT_BASIC_INFORMATION` structure available for both user
and kernel-mode code.
- NDK obtypes.h: `OB_DUMP_CONTROL` is available only for kernel-mode
code; group all the `OBJECT_*_INFORMATION` definitions together.
- XDK: Remove `OBJECT_*_INFO` types that do not exist in the official ntifs.h
The types: `OBJECT_BASIC_INFO`, `OBJECT_NAME_INFO`, `OBJECT_TYPE_INFO`,
`OBJECT_ALL_TYPES_INFO`, `OBJECT_HANDLE_ATTRIBUTE_INFO`, and
`OBJECT_PROTECTION_INFO` (this one being a duplicate of the former one),
correspond to undocumented (by Microsoft) types, that do not
exist in the official ntifs.h file from the Windows IFS/DDK/WDK.
They were non-standard aliases coming from the open-source w32api
(MinGW) package.
Our NDK already contain these types with the de-facto documented names
as found in Geoff Chappell[^1] and System Informer phnt headers[^4].
- NDK/XDK: Update the `OBJECT_INFORMATION_CLASS` enumeration[^3][^4] with
Win11 values and add versioning.
Technically, ntifs.h should *ONLY* contain a reduced version of this
(otherwise undocumented) enumeration for the two semi-public
`PUBLIC_OBJECT_BASIC_INFORMATION` and `PUBLIC_OBJECT_TYPE_INFORMATION`
structures (restricted versions of the full ones, see above).
However, our code relies a bit too much on ntifs.h for definitions
(and NDK very often expects such kernel-mode definitions to be "already"
defined "elsewhere" i.e. in ntifs.h and so doesn't define them otherwise),
and the _full_ version of the `OBJECT_INFORMATION_CLASS` enumeration
found in the NDK collides with that of the ntifs.h.
Thus, as a temporary hack until a better solution is found, transform
the ntifs.h `OBJECT_INFORMATION_CLASS` enumeration into the full one
as well!
- XDK ntifs.h: Add missing `_NTIFS_` guard; add a comment about the fact
that `_GNU_NTIFS_` is a hack only for the ext2fs driver.
Move the `NtQueryObject()` routine to just after the `OBJECT_*_INFORMATION`
structures.
[^1]: https://www.geoffchappell.com/studies/windows/km/ntoskrnl/inc/api/ntobapi/object_basic_information.htm
[^2]: https://ntdoc.m417z.com/object_basic_information
[^3]: https://www.geoffchappell.com/studies/windows/km/ntoskrnl/inc/api/ntobapi_x/object_information_class.htm
[^4]: https://ntdoc.m417z.com/object_information_class
This is a field from NT6+. We need it for cycle time accounting.
To avoid changing the structure layout, the fields are added to the end of ETHREAD/EPROCESS, until we switch to NTDDI_VISTA, where they are part of KTHREAD/KPROCESS.
* [SDK][KMTESTS:RTLRANGE] RtlRange Improvements
- Implement RtlGetLastRange (NT6.1)
- Implement RtlInvertRangeListEx (NT6.0)
- Honor AttributeAvailableMask
- Honor RTL_RANGE_SHARED_IS_VALID (In use for for PCI)
- Honor RTL_RANGE_NULL_CONFLICT_IS_VALID (In use for PCI)
- [SDK] Final RangeList bug fixes so tests pass on windows and reactos
FsRtlCheckLockForReadAccess() accepts access through an exclusive
byte-range lock when the IRP key matches, even if another process
owns the lock. FsRtlFastUnlockAll() likewise removes exclusive locks
without checking the Process argument.
Require both the key and requestor process for exclusive-read access,
and skip exclusive locks owned by other processes in FsRtlFastUnlockAll().
This matches the ownership checks already used by
FsRtlFastCheckLockForRead() and FsRtlFastUnlockAllByKey().
Reference:
- https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/ntifs/nf-ntifs-_fsrtl_advanced_fcb_header-fsrtlfastchecklockforread
llvm-mingw's static runtime (libc++, libmingwex, libc++abi, libunwind)
references symbols the NT 5.2 export surface does not provide. Add a
static library, linked into the Clang runtime chain below
DLL_EXPORT_VERSION 0x601, providing:
- C99 vsnprintf/snprintf on top of _vsnprintf/_vscprintf.
- __imp_* aliases binding dllimport references to the static CRT
definitions instead of ucrtbase import thunks, which collide with
them (lld: "<sym> was replaced").
- K32EnumProcessModules, forwarded to psapi's EnumProcessModules.
- The Win7 SRW lock and Vista condition variable surface, bound to the
RTL implementation linked statically from rtl_vista. Modules get one
self-contained, consistent synchronization implementation (ReactOS'
lock layout is not Windows-compatible), no kernel32_vista.dll
dependency, and stay runnable on any Windows version. Static SRW
linking suggested by Timo Kreuzer.
Address review feedback on the llvm-compat shims:
sync_static.c now uses the proper SDK/NDK headers with WINAPI/NTAPI, imp_alias.h
moved to sdk/include/reactos and fixes the msvcrtex slot decorations too, and a
new InitOnceExecuteOnce shim lets us drop libkernel32_vista from the interface.