Repository navigation
Conversation
The tray crashed with 0xc0000409 while driver 617.14 was replaced by 621.14. Its dump: Control Flow Guard fast fail 10 inside nvml.dll, with NVML's implementation from the old driver's folder still loaded after the libraries were started again, next to NVAPI's from the new one. The card was left at stock without a word until the next logon. The tray now stamps System32\nvml.dll when it loads the libraries and looks at it every second. A new stamp stops all calls into the loaded libraries; the app then starts a new copy of itself (not during a run, and an elevated copy only from Program Files), which loads the new driver's libraries, waits until they answer and shows the balloon that asks for the 5-minute retest. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
On 2026-11-05 the tray (0.4.8-rc8, the same code as 0.4.8 here) crashed while the NVIDIA driver 617.14 was replaced by 621.14:
The card was left at stock and the user heard nothing until the next logon. A driver update every few weeks makes this the case most users meet.
The crash dump (
%LOCALAPPDATA%\CrashDumps, read with a small minidump parser):FAST_FAIL_GUARD_ICALL_CHECK_FAILURE: Control Flow Guard stopped an indirect call to an address that is no valid target, here one in no loaded module;nvml.dllfromnv_dispi.inf_amd64_da865124...(the old driver, 2026-10-02) -> ntdll;nvapi64_impl.dllfromnv_dispi.inf_amd64_cee48bd6...(the new driver, 20:57:32); the oldnvapi64.dllandnvapi64_impl.dllare in the unloaded-module list.So the tray had lost the device, started its libraries again (
hw_lost/retry_hw), got NVAPI from the new driver but NVML's implementation from the old one, and that NVML called into code that was gone. Nothing in the process can make NVML fresh again.What
gao::compare_driver_files(core, pure):Same,ChangedorUnknownfor the stamp (write time, size) ofSystem32\nvml.dllagainst the one taken when the process first loaded the libraries.gao::nvml_library_stamp()(hw): that stamp, read withGetFileAttributesExW, without loading anything.init_hw()and compared every second inon_telemetry. A change stops every call into the loaded libraries (hw_lost);retry_hwthen never reconnects to them but callsrestart_for_new_driver():--resume --driver-updated(and--hiddenwhen the window was closed).Unknown) nothing is called and nothing restarts.Tests
cmake --workflow --preset ci: builds with/W4 /WX; core_tests and app_tests pass. New unit test forcompare_driver_files.restarting the app to load its libraries), the Application log (no crash) and see the balloon.🤖 Generated with Claude Code