Nothing's more annoying than a UPS that's physically fine but Windows insists it can't talk to it. Error 0X000009B2 — NERR_UPSInvalidCommPort — is almost always a port-mapping problem, not a dead UPS.
The fix (do this first)
Open Services, find the UPS service, and re-point it at the correct COM port. The service stores its port in the registry, and Windows doesn't auto-update that value when USB-serial adapters or motherboards shuffle COM numbers after a reboot.
- Hit
Win+R, typeservices.msc, press Enter. - Scroll down to UPS (some OEMs label it "Uninterruptible Power Supply").
- Stop the service if it's running.
- Double-click UPS → Log On tab is irrelevant here. Go to Recovery only if it keeps crashing. The setting you want is under General — you're looking for the startup type. Leave it as Automatic.
- Open Device Manager (
devmgmt.msc), expand Ports (COM & LPT), and note the exact COM number your UPS is on (e.g. COM3, COM5). - Now open Registry Editor as admin:
regedit. - Navigate to:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UPS\Parameters - Find the string value CommPort. It'll say something like
COM1. Change it to match what Device Manager shows. - Close regedit, go back to Services, and start the UPS service.
If it starts clean with no 0X000009B2 in Event Viewer, you're done. If it still fails, the service is cached — reboot once. That's it.
Alternative: use the built-in UPS applet
Older servers have a UI for this. Control Panel → Power Options → UPS tab (if present). Select your UPS, click Properties, and pick the COM port from the dropdown. This writes the same registry key under the hood, but it validates the port before saving. Use whichever you prefer — the applet is friendlier, the registry is faster.
Why this works
The Windows UPS service isn't smart. It reads CommPort from that registry key at startup, opens the port with CreateFile("\\\\.\\COMx"), and if that fails it logs 0X000009B2 and bails. It doesn't scan for other COM ports. It doesn't fall back. It doesn't retry. One bad value = service dead, and every UPS event (on-battery, low-battery, shutdown trigger) gets silently dropped.
Here's the real-world trigger I see most: someone plugs a USB-to-serial adapter into a different USB port. Windows assigns it COM5 instead of COM3. The UPS still works — the service doesn't. Or a driver update reshuffles COM assignments overnight. Same result. The fix isn't about the UPS at all. It's about agreeing with Windows on which port number you're using.
Rule of thumb: if the UPS shows up in Device Manager but the service errors with 0X000009B2, it's a mapping problem. If it doesn't show up in Device Manager at all, it's a cable or driver problem — fix that first.
Less common variants
1. The COM port isn't exposed to the OS
USB UPSes from APC, CyberPower, and Eaton sometimes enumerate as a HID device, not a serial port. You won't see them under Ports. If that's your case, the Windows UPS service can't use them at all — you need the vendor's PowerChute / PowerPanel / Intelligent Power Protector software instead. Kill the Windows UPS service (sc config UPS start= disabled) and let the vendor tool own it.
2. Permissions on the COM port
Rare, but I've seen it on hardened servers. The UPS service runs as LocalSystem by default. If someone changed the logon account to a restricted user, that account needs access to the port. Check the service's Log On tab and put it back to LocalSystem unless you've got a specific reason.
3. Legacy serial UPS on a physical COM port that's disabled in BIOS
On older Supermicro and Dell PowerEdge boxes, serial ports get disabled in BIOS to free IRQs. Device Manager won't show COM1 because it isn't there. Enable it in BIOS, reinstall the driver, then redo the registry fix.
4. Third-party serial driver crashes
Prolific PL2303 clones are notorious for this. The adapter shows in Device Manager, but opening the port returns errors. Swap to a genuine FTDI chipset cable (or a Tripp Lite / StarTech with FTDI inside). Prolific clones cost $6. FTDI cables cost $20. Buy the FTDI. You'll save yourself three hours of swearing.
Prevention
- Pin the COM port. In Device Manager, right-click the UPS's port → Properties → Port Settings → Advanced → set an explicit COM number in the low range (COM2 or COM3) and stick with it. Windows will try to honor it across reboots.
- Don't move USB cables. Plug the UPS into the same USB port every time. On servers, label the port with a piece of tape. Sounds silly, saves callouts.
- Watch Event Viewer after updates. Any update that touches USB or serial drivers (Windows cumulative updates, chipset drivers) can reshuffle assignments. Check System log for source UPS after each patch cycle.
- Consider vendor software. The built-in Windows UPS service is 1990s tech. It works, but PowerChute Network Shutdown or NUT (Network UPS Tools) on Linux gives you far better visibility and doesn't break when COM ports move.
- Document the port. Put the COM number in your runbook. When the service dies at 3AM, the on-call tech doesn't have to hunt through Device Manager.
Bottom line: 0X000009B2 is a bookkeeping failure, not a hardware failure. Fix the registry value, restart the service, and it's done. If the port keeps moving on you, that's the real problem to solve — pin it or switch to vendor software that doesn't care.