How do I remove a driver completely on a Windows XP client machine?

Windows uses a number of factors to decide what is the "best" driver, such as hardware ID matching (INFs that match more specific hardware IDs are "better"), driver date, driver version, and whether the driver is signed. How Setup Selects Drivers has the details if you're interested.

As for how to remove the newer driver, if it has an installer listed in Add/Remove Programs, then by all means use that. If not, you should be able to manually choose the older driver by right-clicking on the device in Device Manager, selecting "Update Driver...", "Install from a list or specific location", "Don't search. I will choose the driver to install", etc. Or did you already try that? (As well as selecting "Uninstall..."?)

If all else fails, you might have some success using the devcon command that ships with the Windows Driver Kit. You can remove a driver package using devcon dp_delete, or force Windows to choose a different driver using devcon update. There's also an older version of devcon available for direct download (the WDK is pretty large).

If you resort to manually deleting the driver's .inf file from %SystemRoot%\inf, be sure to delete the corresponding .pnf file as well, because Windows uses that to cache some/all of the .inf information.


  • Here are some good pointers for uninstalling pesky .inf files (Microsoft link): http://support.microsoft.com/kb/813449

  • Something to try if your driver uses a .dll would be to unregister the driver's dll: http://www.xp-vista.com/other/how-to-unregister-dll-files

    It's worth a try, just make sure you 'cd' to the directory containing the dll.

    unregister_dll

  • Another useful tool for these kinds of problems is the Change Analysis Diagnostic tool: http://support.microsoft.com/kb/924732


Have tried devcon, but it says that there is no dp_delete command, and when investigating things I found a easier way.

As some people say, you can delete .inf and pnf. What they don't tell is how to locate those.

First, open device manager as administrator, right click on device and choose properties, on driver tab, click on details, and you would get the .sys filename of the driver.

Then you must locate the correct .inf and pnf to delete, they are not the same name as the .sys.

Follow instructions from http://winhlp.com/node/199 , which in brief are:

  • cmd as admin, cd to inf folder: cd %windir%\inf
  • Using the name of the .sys file (without the extension) instead of "WG311T", look for the inf file with:
    • for %a in (oem*.inf) do find /i "WG311T" %a >>out.txt
  • Open out.txt with notepad, and look which oem*.inf file is your driver.
  • Delete .inf and .pnf oem file with (substitude "oemXX" for the name of oem file where your driver was found):
    • attrib -h -r -s oemXX.*
    • del oem12.* Reboot

Follow original link http://winhlp.com/node/199 for detailed instructions.

How to know the name of the driver to look for isn't explained there, remember that it's the same as the .sys file (without the extension).

Tested removing bcmwl6.sys driver from Broadcom wifi succesfully.