Skip to content

Instantly share code, notes, and snippets.

@JPvRiel
Last active September 4, 2018 17:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save JPvRiel/78ea9426de3427b94044b0437296927a to your computer and use it in GitHub Desktop.
Save JPvRiel/78ea9426de3427b94044b0437296927a to your computer and use it in GitHub Desktop.
Fixing "page fault in nonpaged area" Windows 10 BSOD caused by installing spice-guest-tools

Synopsis

Boot failure was caused by installing spice-guest-tools which, if you read details about it, also includes the QXL driver and the install broke my Windows 10 build 17134 guest somehow. This occured on Ubuntu 16.04 LTS with QEMU emulator version 2.5.0.

Error

BSOD with "page fault in nonpaged area" occurs after installing spice-guest-tools-latest.exe. It possibly clobbers other stable/good versions of drivers.

Automatic boot repair fails. After going through advanced options and getting to a command prompt, inspect the boot repair logs:

E:\Windows\System32\LogFiles\Srt>notepad.exe SrtTrail.txt

Error seen in SrtTrail.txt

Boot critical file e:\boot\resources\custom\bootres.dll is corrupt

Note, the above error can be misleading and at least one user correlated it to a bad graphics driver install - which was the root cause in this case as well.

References:

Failed fix attempts

When restarting with advanced startup options, "Enable low resolution video" didn't help, nor did "Safe mode" or trying to force and set safeboot minimal as the default boot option from a recovery command line.

On the libvirt/KVM host, trying to switch from QXL to VGA video to avoid the BSOD graphics bug didn't work either.

Fix

What did work if forcing installing a different version of the driver not packaged with spice-guest-tools-latest.exe, but rather forcing installing the QXL dod w10 driver from the ISO provided via Fedora (https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/). This can be done via the command prompt (accessed via advanced recovery options) using the pnputil command. E.g. from qxldod\w10\amd64 folder of ISO, run pnputil /add-driver /install qxldod.inf /force.

If it complians about there already being an up-to-date driver:

  • Search the output of pnputil /enum-drivers to identify the "published" oem.inf name above the orginal qxldod.inf name.
  • Use pnputil /delete-driver oem<num>.inf /force to get rid of it before installing the previously working version.

Additional cleanup

Force removing all previously installed versions. It's unfortunate that Add-WindowsDriver only works on offline windows images, so pnputil has to be used and it outputs normal line-delimited text instead of powershell objects, so the output has to be parsed as raw text.

$iso_inf=(Get-ChildItem *\w10\amd64\*.inf)
$driver_enum_lines=(pnputil.exe /enum-drivers)
ForEach ($i in (1 .. ($driver_enum_lines.Count - 1))) {
  if ($driver_enum_lines[$i] -match '^Original Name:\s+(?<orig_inf>.+?\.inf)$') {
    $orig_inf = $matches.orig_inf
    if ($orig_inf -in $iso_inf.Name) {
      if ($driver_enum_lines[$i - 1] -match '^Published Name:\s+(?<pub_inf>oem[0-9]+\.inf)$') {
        $pub_inf = $matches.pub_inf
        Write-Output "`n# Removing $orig_inf which was installed with Published name $pub_inf"
        pnputil /delete-driver $pub_inf /force
      }
    }
  }
}

Then force installing all windows 10 64bit drivers from the ISO

Get-ChildItem *\w10\amd64\*.inf | %{ Set-Location $_.DirectoryName; pnputil /add-driver $_.Name /install /force }; Set-Location \
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment