Johnny Dakovo wrote:
In my INF file I have:
“%DeviceName%=Device_Install, USB\VID_XXXX&PID_XXXX&MI_00”
“%DeviceName%=Device_Install, USB\VID_XXXX&PID_XXXX&MI_01”
And yes at some point for this USB device there was only this line in
my INF file:
“%DeviceName%=Device_Install, USB\VID_XXXX&PID_XXXX”
So you mean I should never see more than one interface in my driver
instance when defining “…&MI_xx”?
Exactly, yes![1] You have been burned by a very nasty Windows problem.
It does not handle the case of a device that is first seen as a
single-interface device, and later transitions on the same system to a
multi-interface device. If you go into the registry in
CurrentControlSet\Enum\USB\VID_xxxx&PID_xxxx, the subkey that has your
device still has a Service name that identifies your service. Your
later INF added additional entries, but it didn’t touch that existing
composite entry, and because the system looks there first, that’s the
one that wins.
This is a difficult problem to clean up. What you’d like to do is
delete the VID_xxxx&PID_xxxx key (and its children), plus all of the
VID_xxxx&PID_xxxx&MI_xx keys (and their children). But for reasons that
are not entirely clear to me, even administrator does not have
permission to view or delete the Properties subkey. It is possible to
change the permissions to allow that, but it is a tedious process.
There are ways to load “regedit” as the LOCAL_SYSTEM user that can do it.
If this is a disposable machine where you can easily reinstall Windows
from scratch, that is the safest path. With a clean registry, the
problem will not occur.
As a hacky alternative, you can go into the first subkey of
Enum\USB\VID_xxxx&PID_xxx, and change the Service value to “usbccgp”.
Then, either reboot, or unplug and replug. That should do it as well.
[1} For the pedants in the audience, there are exceptions. If you have
an IAD descriptor that groups multiple interfaces together, or if you
are an audio-class or video-class device where interfaces are grouped
together, then usbccgp will hand you both interfaces. They will stay in
the same order as in the original descriptor, so the driver can tell
which is which.
–
Tim Roberts, xxxxx@probo.com
Providenza & Boekelheide, Inc.