We have an existing product that has our standard USB VID/PID. We haven’t set the USB REV to anything so it defaults to FFFF, but the .INF file for our driver doesn’t specify the REV so it works fine:
USB\VID_1234&PID_1234&MI_00
We now have to introduce a new version of the product that uses the same VID/PID, so we thought we could use the REV to make sure it uses the new driver. The new product sets its REV to 0008 (no particular reason it has to be this) so the .INF file looks like:
USB\VID_1234&PID_1234&REV_0008&MI_00
This seems to work fine - the new driver is used when the new device is connected.
The problem comes when the old driver is also installed. In order to get it to ignore the new device I changed the .INF file to:
USB\VID_1234&PID_1234&REV_FFFF&MI_00
but Windows refuses to recognise this as a valid driver for the old device. Since Device Manager shows the Hardware ID as “USB\VID_1234&PID_1234&REV_???&MI_00” (presumably because FFFF can’t be expressed as a valid BCD) I tried putting this in the .INF file:
USB\VID_1234&PID_1234&REV_???&MI_00
This driver is recognised for the old device. However, if I remove it and plug in the new device it then uses the old driver. I don’t understand how, because if I try and force the new device to upgrade to the old driver it says “The specified location does not contain information about your hardware”.
If I have the new device using the new driver, then unplug and insert the old device, it uses the new driver. I can’t understand why because the new driver should only accept a REV of 0008. Again, if I try to force it to upgrade to the new driver it gives the error above.
I can only assume that when a device is inserted if the VID and PID are the same then Windows doesn’t check the REV, but does if you try to upgrade the driver.
So what we can do? Since the old device has been shipping for a while it’s too late to set the REV to something other than FFFF. Are there any other ways round this, or are we screwed?
Thanks for any help.