You're trying to install a driver for an older piece of hardware—maybe a USB-to-serial adapter, a legacy printer, or a PCI card from 2010—and Windows throws up SPAPI_E_DI_FUNCTION_OBSOLETE (0X800F023E). The install wizard runs for a few seconds, then says it couldn't find the device or the operation isn't supported. This usually pops up when you're running an installer written for Windows XP or Vista on Windows 10/11, or when the INF file references a function that's been deprecated. I saw this last month with an old Zebra label printer; the vendor's setup.exe just wouldn't play nice with modern Windows.
What's actually going on
Windows device installation uses a set of APIs (the SetupAPI). Over the years, Microsoft marks certain operations as obsolete—deprecated but still present for compatibility. When a driver package calls one of those old functions, Windows returns SPAPI_E_DI_FUNCTION_OBSOLETE to say, "Hey, this installer is using a method I don't support anymore." It's not a hardware failure; it's a software mismatch. The driver might be perfectly fine, but the installer script is stuck in 2007.
The real fix isn't to make Windows accept the old function—that's a deep system hack. Instead, you bypass the broken installer and let Windows' built-in driver update handle the device directly. Nine times out of ten, that works because modern Windows still supports the actual INF files, just not the ancient install programs that wrapped them.
Fix: Install the driver manually
You're going to tell Windows to look at the driver files you've already downloaded and ignore the broken setup.exe. Here's the step-by-step.
- Extract the driver files. If the downloaded file is a .exe, run it but cancel the installer once it extracts files to a temp folder (usually
C:\Program Files\VendorNameorC:\Windows\Temp). Alternatively, use 7-Zip to extract the .exe directly—right-click and select "Extract here." You want the folder that contains .inf, .sys, and .cat files. - Open Device Manager. Press
Win + Xand select Device Manager. Look for the device that's failing—it'll often be under "Other devices" with a yellow exclamation mark, or it might show as "Unknown device." - Right-click the device and choose "Update driver."
- Select "Browse my computer for drivers". This is the keyword—don't let Windows search automatically.
- Click "Let me pick from a list of available drivers on my computer". Then click "Have Disk" and browse to the folder you extracted in step 1. Pick the .inf file that matches your device (if there's a choice, go for the one with "x64" or "Win10" in the name).
- Follow the prompts. Windows will install the driver and may ask to restart. If it warns about an unsigned driver, that's normal for older hardware—just click "Install anyway" if you trust the vendor.
That bypasses the obsolete function call entirely because you're using Windows' modern SetupAPI to process the INF directly, not the old installer.
If it still fails
Sometimes the manual route doesn't work, especially if the INF itself references functions that don't exist anymore. Here are three things I check when that happens:
- Check if there's a 64-bit vs 32-bit mismatch. Old hardware often only has 32-bit drivers. On a 64-bit Windows, those won't install at all. You might need to run the device in a virtual machine with 32-bit Windows, or find a third-party signed driver (look on the vendor's site for "Windows 10 64-bit"—if it's not there, you're out of luck).
- Use the manufacturer's dedicated tool. Some vendors (like Prolific for USB-serial chips) offer a driver cleaner tool that removes old versions, then you can try the manual install again. It's worth a shot if the above steps didn't pick up the device.
- Check the INF with a text editor. Open the .inf and search for
IncludeorNeedslines. If they reference files that don't exist on your system, that's your culprit. You might be able to delete those lines and save the INF as a custom version—but that's advanced, and you need to know what you're doing. If you're not comfortable, stop there and look for a different driver source.
That's the whole deal. Most times, the manual install trick gets the job done. If it doesn't, the hardware might simply be too old for the OS—and honestly, at that point it's worth asking if the device is worth the hassle. I've told more than one client to just buy a modern USB adapter for $15 instead of fighting a 2006-era driver.