Windows handling of USB is inconvenient at times, here are two problems.
Ever go to the device manager (devmgmt.msc) and see a long list of things like "Input Device" or "Composite USB Device".
That's not very helpful, is it?
You can name your devices yourself or use a utility.
USB devices (and USB device interfaces) can have a "FriendlyName". Usually it's not set.
You can set it yourself using regedit.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\VID_0403&PID_6001\A015VB4E => FriendlyName
(The above example is an FTDI UART. A015VB4E is the serial string.)
As always, having USB devices with serial strings is important (even if you are making something custom and there will only be one in the universe).
If you plug something into Windows that has a serial string, then plug it into a different hub port then Windows will say, "Oh, I know this one".
If your device does not have a serial string and you plug it into a different hub port then Windows will say, "Wow, a brand new device!"
In this case it will assign a fake serial string (actually, they call it location) with something like "7&279c4dc7&1&7"
If you go to DeviceManager and View > Hidden Devices you will see lots of entries for anything that you ever plugged in.
Things with a serial string will only appear once. Things without a serial string will show up for each time you plugged it in a different port.
Now, if you care and get tired of all this clutter you can actually delete all the keys under HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB
No, that's really not radical, Windows just figures it out all by itself the next time you boot.
One other reason to delete
some of these keys if you are developing a USB device and you make a radical change in the number/type of interfaces
I've found that sometimes Windows gets confused unless you delete those keys.
You don't need to do this for minor changes like HID report descriptors.
So I have one little utility for listing, naming & deleting these entries, enumusb.exe
C:\>enumusb /l <-- list everything
0403:6001 A015VB4E 2020-09-22 11:21 FTDI #1
0403:6010 210918DE7013 2020-09-23 04:04 CMOD A7
0403:6010:00 8&22ffbf39&0&0000 2020-09-23 04:04 CMOD A7 JTAG
0403:6010:01 8&22ffbf39&0&0001 2020-09-23 04:04 CMOD A7 UART
0409:0050 6&2760bdae&0&3 2020-09-19 09:41 StarTech 7 port hub
...
C:\>enumusb /v0403 /p6001 /sA015VB4E /f"My little UART" <-- rename specific
C:\>enumusb /v8087 /f"AMD is better than Intel" <-- rename everything by 8087
C:\>enumusb /d /v8087 <-- delete everything by 8087
(I should document this but enumusb /? will get you started.)
If your devices have no serial string then friendly naming will name all the devices of that Vid/Pid.
If you plug the serial-less device into another hub port then you will have to do another naming operation.
You could put all your naming operations into a batch file to run again.
The other thing that drives me crazy is that you are sitting at your desk and Windows gives a flurry of USB "bongs".
What just happened? What disconnected? What connected?
You'd think that the Event Log would have it. Nope. (At least not by default.)
So if you have a wonky cable somewhere you'll have a hard time figuring out which one it is.
The other utility that I have is usblog.exe
It's simple, logs what is connecting and disconnecting (and using those FriendlyNames that you put in).
The two utilities can be downloaded at
http://www.temblast.com/windows.htm