7

At MSDN it is stated that there are two techniques to install INF files on Windows XP or later:

  • Programmatically through SetupCopyOEMInf function.
  • Add an entry called CopyInf on an INF section.

Are there an equivalent entry on an inf section to uninstall inf files that is similar to SetupUninstallOEMInf function?

I found this solution using SetupUninstallOEMInf but it does not seems suitable to me.

coelhudo
  • 182

4 Answers4

4

Well it depends on the .inf file (some may not have un-installation function at all), but you could always try one of the following:

rundll32 setupapi.dll,InstallHinfSection DefaultUninstall 132 <driver.inf>

rundll32 advpack.dll,LaunchINFSection <driver.inf>,UnInstall

rundll32 syssetup.dll,SetupInfObjectInstallAction Uninstall.NT 4 <driver.inf>

(Of course, replace the filename, including quotes as necessary.)

Synetech
  • 68,827
  • Right, but I didn't find any entry that explicitly remove oemXX.inf generated by CopyInf entry. I am able to remove *.sys files that was copied to %SystemRoot%\System32\drivers with CopyFiles entry. There is Delfiles entry but only works when I know which files I need to remove. – coelhudo Jul 26 '12 at 21:29
  • Are you asking about oem*.inf being automatically removed from \Windows\INF? I have never seen that happen, especially with things that are installed via .inf files instead of .exe or .msi installers. You could open them in a text-editor and delete the one(s) that no longer apply. – Synetech Jul 26 '12 at 21:33
  • Yeap, I need this to be integrated into a NSIS (the installer from nullsoft) script. It has to be executed automatically when my app is uninstalled. – coelhudo Jul 26 '12 at 21:47
  • Ah, I see. Well if you are writing your own (un)installer, then just add a line to delete the .inf file. You can query the InfPath value of the device in question under the HKLM\SYSTEM\ControlSet001\Control\Class registry branch to find out what the oem*.inf filename is for it. – Synetech Jul 27 '12 at 00:22
  • I didn't find anything similar to the oem*.inf in that registry branch (windows xp and windows 7) tat was generated while installing. Is there any other place where I can find the corresponding oem name? – coelhudo Jul 27 '12 at 20:57
  • 1
    Are you sure the device was installed? Are you sure there is an oem*.inf file? Do a search in \Windows\inf\ for oem*.inf files taht contain the device name (or just check them all in notepad if there’s only a few). – Synetech Jul 27 '12 at 22:11
  • 1
    I've yet to see a driver installation .inf (unlike .infs that install some system components) that has an uninstallation section. So these commands are utterly useless. – ivan_pozdeev Dec 31 '17 at 13:24
3

No, driver INF files do not typically feature an uninstall section. As per How to remove .inf files from the system and How Devices and Driver Packages are Uninstalled | Microsoft Docs , DiUninstallDevice and SetupUninstallOEMInf are the ways to uninstall a device and a driver package, correspondingly.

From the console, you can call the latter with devcon of at least version 6 (from Windows 8.x DDK; confirmed to work in XP):

devcon [-f] dp_delete oemXXX.inf

(-f forces uninstallation even if the driver is in use)

See Quick Method to install DevCon.exe? how to download the utility if you need to do this by hand.

From an installer package, you need to use facilities provided by the installer framework that would call those API for you.

ivan_pozdeev
  • 1,902
  • where oemxxx.inf is not the same inf that you have installed from; use devcon dp_enum for a list to installed oem*.inf files – kellogs Nov 10 '20 at 17:24
1

In my case the rundll32 method failed, and finding it hard to get a hold of devcon.exe, I discovered another way, as suggested by Deleting a Driver Package from the Driver Store. What you basically have to do is to open a cmd-prompt in administrative mode and issue the following command:

C:\Windows\INF\>pnputil /delete-driver <example.inf> /uninstall
  • Worked great for me. Had a process "ipfsvc.exe" blocking port 8888. Went to the process folder and selected that INF-file for uninstallation. Fiddler works again ;-) – Carsten Nov 15 '23 at 12:41
0

You may not initially know the OEM###.INF filename but that name is what Microsoft calls the driver for the INF you installed. Look in the registry for your actual INF filename and see what OEM###.INF it corresponds to (replace ### with 3 digits shown in registry), then you can use pnputil /delete-driver OEM###.inf and you'll notice it finds both copies in the driver store repository folders and removes them the proper way. This applies at least to Windows 10 Pro 64-bit but I assume other editions and versions as well.