Milestone release:
20230930 Core
- Replaced: WinRing0 driver with CPUID driver
- Improved: Arduino connection monitor
GUI
- Fixed: Crash after pressing Backspace key while Hex area is activated when no data is loaded or cursor isn't set
- Fixed: Crash after pressing alphanumeric keyboard keys while ASCII area is activated when no data loaded
- Fixed: Pressing arrow keys showing invalid cursor position in status bar when no data is loaded
- Fixed: Right and left arrow keys behavior when Scroll Lock is on
- Redesigned: Set RSWP dialog window checkbox list design
- Added: Importing DDR5 SPD dumps created with OCTool
- Added: Maximum PCI buses option SMBus setting
- Added: Keep line breaks on copy option
- Added: Keyboard lock keys status
SMBus
- Added: DDR4 & DDR5 support on Intel Alder Lake and Raptor Lake systems (600 and 700 series chipsets)
- Updated: AMD SMBus support on systems with PMIO registers disabled
- Improved: SMBus discovery on supported systems
- Improved: RSWP test reliability
Firmware
Schematic
- Improved: WP compatibility with SDRAM, DDR, DDR2, DDR3, and DDR4 memory
This release adds support for DDR4 and DDR5 on mainstream Intel platforms.
Supported chipsets in this release: B660, B760, H610, H670, HM670, H770, Q670, W680, WM690, Z690, and Z790. (W790 is not supported.)
To read DDR5 SPDs in full, SPD write option must be enabled by BIOS. SPD write disable was introduced with Intel 80 series chipsets, but until now, it only prevented writing SPDs, when enabled. With SPD write disabled you will only be able to read the first 128 bytes of DDR5 SPDs. If SPD-RW detects SPD write is disabled on your DDR5 system, it will give you an option to read the SPD in part or in full, and if you choose to read the entire SPD, without proper page switching read data will repeat after the first 128 bytes. SPD write disabled does not affect reading DDR4 SPDs.
To check if your system has SPD write disabled, connect to your SMBus controller and choose Info from the Device menu.
On some boards you can manually enable SPD write, if it is disabled. To do that on Asus boards, go to UEFI, navigate to Tweaker's Paradise under AI Tweaker/Extreme Tweaker page, and set "SPD Write Disable" option to False.
About:As you can see, this release is labeled milestone. But it's not because it's the first major release after a long delay or new platform support.
It's the driver.
Ever since I implemented SMBus support in SPD-RW, I relied on WinRing0 driver. While it's been working fine, it is not perfect, because it was not created with security in mind and has been blacklisted by many antiviruses as malicious. Writing and compiling own driver is not an option, as Windows requires drivers to be signed to load (which is expensive) without having to disable driver signature enforcement.
In this release I decided to get rid of WinRing0 and replaced it with CPUID driver, the one that is used by CPU-Z, HWMonitor, and many other CPUID-SDK based projects.
What's wrong with WinRing0?
WinRing0's does not create device object with exclusive flag, meaning it would allow multiple applications at a time to open unlimited number of handles. CPUID driver is created with exclusive flag, which allows only one handle opened at a time. SPD-RW opens driver handle only when needed and immediately closes it to allow other applications to use it.
WinRing0 does not check for access rights. That means once it is loaded, any application, even the ones started without administrative rights, can access and use WinRing0. CPUID driver requires certain application's privileges in order to be used.
Last, but not least, CPUID driver has a Microsoft WHQL signature, while WinRing0 is signed with a private individual's signature. Many non-Microsoft signed drivers have been blacklisted, like RwDrv (used by RW-everything) and atillk64 used by another SPD program, require VulnerableDriverBlocklistEnable registry key present in order to work in modern versions of Windows 11.
To increase security further, I modified how SPD-RW interacts with the driver. The driver stays running on the system only when needed. The driver service only runs, while SPD-RW is connected to an SMBus controller. When SPD-RW is closed, the driver is removed.
Also, I decided not to use loader this time, as it additionally provoked false AV positives in the past.
Enjoy.