I’ve just been through a few days of struggling with the System thread exception not handled BSOD on my Windows 10 VM under qemu kvm/virt-manager. This has been an interesting issue to resolve as it hasn’t really behaved consistently. Upon first encountering it, my initial response was “too hard basket”. As I’ve gone to the trouble of creating my passthrough VMs and backups, I immediately resorted to restoring a full virtual disk back up. This worked and had me very pleased as a proof of my premise…briefly. After a few reboots it was back.
The next candidate was Windows Update, as I assumed some process must be dynamically interfering with the system to replicate the issue, and the most likely to start reproducing a problem on an aged image was updates; the updates would download right away. I then had the system fully working with latest updates and thought I was safe but this too crashed.
Next solution was to assume that the PCI-e passthrough on graphics was coming undone. nVidia is known to have gone so far as programming in detection and an “error” message (Error 43) to rat out hardware running under virtual machines. I managed to boot the system by removing the hardware vendor ID spoofing I’d set up in my VM definiton, this brought the graphics up in a restricted mode due to Error 43, but it did boot reliably without BSOD. I purged the nVidia drivers using Display Driver Uninstaller from Guru 3D, shutdown and added my spoofing back. Booted, installed the graphics drivers and all was well with the world. For a short time.
The BSOD returned. This time I focussed on the word “thread” and another post I’d encountered in my manic googling that had mentioned CPU emulation settings. I decided to give it a crack and downgraded my i7 3770 (Ivy Bridge) to Core2Duo emulation. The system booted. This did in fact appear to operate like a toggle, changing it back would brick booting and then fix it when changed to anything other than “host-passthrough”. Strangely enough, it’s now working with “IvyBridge” selected, though I believe this is functionally the same as selecting host-passthrough. I’m not going to question it until it breaks again.