Extracting drivers from Windows

Since about 2014 (as I write this late-2019) I started buying these incredibly low-end and low-priced Intel Atom-based devices.

There was something about a device running windows and coming in under $100 that never failed to fascinate me (actually I got a non-windows Atom device for around $45, as a novelty).


Let me stop here and mention this: I completely failed at the stated goal. I still don’t have a solution. These are just some things I found a long the way in my attempt that could come in use in other contexts.


I was trying to find the perfect Windows device for an arcade cab or cab-like creation I wanted to eventually build. Unfortunately there are several problems with these devices such as the heat generated, the on-board storage capacity and of course Windows 10, the version of Windows 10 and the proprietary hardware the devices come with.

This entry is going to concentrate on the one downside in particular: proprietary hardware. More specifically when a device comes with (legitimately licensed) Windows 10 Home but I want to either install a fresh copy of 10 Home or just install 10 Pro with my own license how do I install all the drivers for the hardware?

There are several “obvious” answers (in particular order) to this question:

  1. go the specific device manufacturer’s web site and get the driver(s)
  2. Somehow explore the OEM rescue partition to find the driver in question
  3. use google to search the hardware UUID in hope that someone some place found some way of installing some version of a driver that will make the component work
  4. Find a driver repository like driverpacks or similar to find a compatible driver
  5. Find a more mainstream brand with a device that happens to have the same chipset and does have drivers for download
  6. Use a utility capable of extracting installed drivers to separate cab/cat/bin/inf files (pnputil, DISM, doubledriver, devcon, a powershell command, some other utility or command)

Well usually at least one of these in this list would actually work. It’s just too bad when it doesn’t. I think I concluded by the end all the utilities do pretty much the same thing in pretty much the same way. So if DoubleDriver fails to pick up everything necessary in a driver there’s a pretty good chance PnPUtil and DISM will also miss it.

This is going to explore the different ways I went through trying to backup drivers for installation under a fresh install of Windows. Since this is easier to write about while referring to a specific device I will be writing about the Atom-based Z85 Mini PC (the version with 2 gigs of RAM and 32 gigs of on-board storage that may or may not still be available for purchase). I will note I purchased two of these in late 2017 so I was using a version of Windows 10 from back then. The latest version of 10 (19H2 came out a few days ago as I write this) may behave differently.

I actually did use a program to try and back up the drivers before wiping the device out. I believe it was Double Driver: I backed up all the drivers, even the Microsoft ones (usually safe to assume these would be auto-installed with the OS) and then wiped out the whole storage device including the OEM rescue partition.

Double Driver did it’s job admirably but unfortunately left out the the wifi driver. At least in my experience this seems to be an issue around Broadcom integrated WiFi chipsets.

As a minor aside, when I purchased and started playing around with my GPDWin device (which has review here on my blog) I ran into the same problem: the Broadcom WiFi device didn’t show up when I re-installed Windows 10. In the case of the GPDWin there is a relatively large enthusiast community and apparently someone figured out there was a special .bin file in the system32 directory that the driver needed. A special file in a strange place the driver backup programs failed to pick up.

I don’t actually know how to get a working WiFi driver for the Z85 mini PCs I have. But opening the chassis to look at the PCB which is a thing I like to do I found that one of the two (for reasons?) has a USB port coming off the PCB that is not accessible from outside the chassis. Which is nice actually as it would be a convenient place to put a super-small USB flash drive for some additional storage. But I was going to use it to add a really small USB WiFi adapter to the device.

What I’ve started to do recently (I’ve had to re-install Windows more than usual the past month or so) is export the existing drivers with DISM to a specific location, save that folder then when windows is installed use PnPUtil to import the drivers back into the OS.

I also then take that folder tree of exported drivers and integrate them into my customized Windows 10 install source (but that will have to wait for a separate post).

On an installed system, I use this command to export the drivers:

dism /online /export-driver /destination:D:\MyDrivers

After installing windows 10, I then import the drivers on my freshly installed Windows with:

pnputil /add-driver c:\driverbackup-pnputil\*.inf /install /subdirs 

Like I said: as far as I can tell the export operations of all these commands and programs produce the same results in the form exported drivers. I don’t think one has any advantage over the other. The main thing to note is DISM not being able to import, only export.


References:

  • PnPUtil: (PnPUtil.exe) is included in every version of Windows, starting with Windows Vista (in the %windir%\system32 directory). There isn’t a separate PnPUtil download package. I think this was actually intended to replace DevCon.
  • DISM (Windows command): Apparently exports driver but no equivalent import drivers function. Included with Windows.
  • PowerShell: A PS command called Export-WindowsDriver
    Export-WindowsDriver -Online -Destination d:\drivers
  • DevCon: I believe I found this when I wanted to script auto-installing drivers during an unattended Windows install. You can point it at something like INF file and it will execute it (CLI equivalent of right clicking an INF and selecting “Install” in the menu). PnPUtil does the same thing and much better.
  • Double Driver: a nice GUI utility with check boxes and multiple ways to export drive packages with equivalent ways of importing those packages and the whole thing is portable/no install required. In other words it’s perfect in every way except when a device still has the yellow exclamation point.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s