OmenMon v1.4.0: Goodbye WinRing0, hello PawnIO
The Defender prompt is gone. OmenMon-Reborn no longer ships the WinRing0 kernel driver. The kernel-mode access layer has been replaced with PawnIO, whose Microsoft-signed, HVCI-compatible driver does not trigger Windows Defender.
This is the biggest release since the fork started, with three coordinated goals: kill the AV false positive permanently, fix every regression and user-reported bug from the first week of field testing, and ship a diagnostic toolkit so future bug reports take minutes to triage instead of hours.
⚠️ One-time setup step before upgrading
OmenMon no longer installs its own kernel driver. You need to install PawnIO once:
- Download and install PawnIO from https://pawnio.eu/ (signed MSI, no Defender warning, ~10 MB).
- Drop the new
OmenMon.exeover your existing copy. - Run as Administrator.
That's it — you won't be asked to allow a kernel driver any more, and Windows Defender won't flag the install. Your existing OmenMon.xml, OmenMon-AutoCal.xml, and fan-program XMLs are fully forward-compatible.
✨ What's New & Major Highlights
🔐 PawnIO Migration — Defender flagging is permanently fixed (#1)
WinRing0.sys had a public CVE in older versions and a generic ring-0 surface that triggered Defender heuristics on every install. PawnIO instead ships a single Microsoft-signed driver shared across applications; modules are sandboxed Pawn bytecode that the driver verifies against the maintainer's RSA-2048 key before loading.
- Result: Install PawnIO once and the Defender prompt is gone forever. HVCI / Memory Integrity compatibility comes for free.
🧪 New Diagnostic Toolkit (Telemetry-Free)
Three coordinated additions to make bug reports vastly easier to triage. Nothing is ever uploaded. No network code anywhere; files sit on disk until you choose to attach them to a GitHub issue.
- Crash Dumper: Hooks into fatal exceptions at the earliest possible point. Any fatal crash writes an
OmenMon-crash-yyyy-mm-dd-HHmmss.lognext to the executable containing the full exception chain and diagnostic bundle. OmenMon.exe -Diag: Produces a Markdown bundle with OmenMon version, OS version, PawnIO driver status, resolved model preset, AutoCal sidecar contents, and an EC read/write trace covering the last few minutes.- "Copy Diagnostic Info" (Tray Menu): One-click clipboard copy of the diagnostic bundle for easy pasting into GitHub issues.
📋 New Native Model Entries
| ProductId | Device | Issue |
|---|---|---|
8C30 |
HP Victus 15-fb1000 (2023, AMD) — Includes the firmware-freeze-at-100% guard | #32 |
8D26 |
HP Omen 16-ap0007ns (2026) | #52 |
88EB |
HP Victus 16 (2021) — Earliest Victus 16 generation | #48 |
🔧 Bug Fixes & Improvements
Fan Control & Calibration
- Fan calibration now actually reaches max speed (#40, #41, #52): The Auto-Calibration Wizard's "100% step" was systematically under-driving fans by ~30% on multiple boards because manual mode pins fans at a configured rate ceiling. The wizard now explicitly disengages manual mode immediately before the 100% step to reach true max RPM.
- Fan programs no longer leave the GPU fan stuck off (#39): On some boards (notably 8D07), a prior
SetOff(true)stayed latched in the EC.Hardware/FanProgram.SetFanLevelnow correctly clears the fan-off latch before each level write, ensuring custom curves reach both fans reliably. - HP Omen 8DD0 no longer reports "50000 RPM" (#33): The heuristic occasionally misfired on this board. Added a built-in
AutoCal.Primemapping for 8DD0 pointing at the canonical0xB0/0xB2LE16 tachometers. - Stale sidecars from v1.3.x no longer override built-in mappings:
AutoCal.Loadnow discards any sidecar whose offset/mode disagrees with the curatedKnownBoardstable. Users upgrading from v1.3.x automatically get the correct mapping on first launch. - Tray "Max fan" toggle fix: Stayed silently off when the fan-off latch was set. It now clears
SetOff(false)beforeSetMax(true). - GUI "Constant speed" fix: Restored the post-write mode-refresh when a user cancels the 100% safety dialog and falls back to safe levels.
App Stability & UI
- Transcend 14 "BIOS call failed: 4" crash on launch fixed: Benign BIOS return codes (1, 4, 6, and 46) indicating "command not supported on this platform" previously escalated to fatal
BiosExceptions. They are now silently ignored, allowing the GUI to open normally on newer hardware. - Omen key toggles the main window again (#21): Pressing the Omen key while OmenMon is running fires an IPC message that flips the main window's visibility, restoring the original upstream behavior.
- Build Error Fixed: Removed a leftover call to a non-existent
UpdateFanMode()that prevented compiling on clean checkouts.
🧹 Under the Hood (Developer Notes)
- EC Read/Write Ring Buffer: Records the last 1024 EC operations (timestamp, register, value, op kind) into a lock-free circular buffer. Surfaces through both the crash log and
-Diagto help diagnose intermittent issues (like random fan spikes). - Automated CI Testing (#36): CI now runs
dotnet testagainst a new xUnit suite that enumerates every<Model>entry inOmenMon.xmland validates required registers, byte ranges, and semantics. - Driver Layer Rewrite:
Driver/Ring0.cswas rewritten to delegate to PawnIO while keeping its full public API byte-compatible with v1.3.x.Hardware/Ec.csand every other caller compile and run unchanged. - New Documentation: *
docs/DEV_NOTES_v1.4.0.mdcovers the architecture of the PawnIO migration.Resources/PAWN_BUILD.mddetails operational docs for the embedded PawnIO module.
🙏 Thanks to the contributors
Bug reports and field-test data from:
@ShaqibK (#1), @eyzinox (#28), @NotDarkn (#32), @DreamStare0 (#33), @Byteme-dot (#37), @ghend-oss (#39, #40), @MartinSalg818 (#41), @deadpoolstark (#48), @ethernetme (#52), and the Transcend 14 user on Discord.
A separate thanks to namazso — author of PawnIO and the signed LpcACPIEC module that makes the whole migration possible.
Security Verification (SHA256):
9AA57EDF4138318BD48F835893D6F895C8C762A41E5776256EADD60DC63A773D