[wdmaudiodev] Re: [EXTERNAL] Same problem with WIN10 update 2004

  • From: Eugene Muzychenko <reg.wad@xxxxxxxxxxxxxx>
  • To: Gary Daniels <wdmaudiodev@xxxxxxxxxxxxx>
  • Date: Fri, 19 Jun 2020 18:19:11 +0200

Hello Gary,

The only complete fix with the best timeline is to make the
reference string unique for devices which lack a hardware id.

Thank you for the detailed explanation. But what exactly do you mean
by the "hardware id"?

In Windows terms, a "hardware id" is a string (or a set of strings)
provided in the INF Models section, and saved in the "HardwareID"
device property value:

https://docs.microsoft.com/en-us/windows-hardware/drivers/install/inf-models-section
https://docs.microsoft.com/en-us/windows-hardware/drivers/install/hardware-ids

Microsoft claims that a hardware id is the primary device identification string:

https://docs.microsoft.com/en-us/windows-hardware/drivers/install/device-identification-strings

But even in Windows developers' messages, I often see the "hardware
id" in the meaning of "instance id" or "instance path" (a registry
branch under the Enum key).

For example, for the "Simple" version of MSVAD, hardware id is
"*MSVADSimple", and instance id/path is "ROOT\MEDIA\0000" (if
installed as a first virtual audio device).

From the experiments, I see that Windows 10 does not use hardware ids
to identify audio devices as all previous Windows versions do. It even
does not use the secondary-level instance id part of root-enumerated
devices (the "0000" in the example above, Matthew had confirmed this
earlier).

For example, I built a virtual audio driver with given reference
strings, then built an INF file with "MyHardwareId_first" hardware
id, and installed it to the "ROOT\MEDIA", getting auto-generated
instance path "ROOT\MEDIA\0002".

Then I copied the INF file to another, changed the hardware id to
"MyHardwareId_second", also changed filter friendly names, uninstalled
the first device/driver, and installed the second one instead. Since
the first virtual device was uninstalled, the newly installed device
gets the same instance id, "ROOT\MEDIA\0002".

In Windows from 2000 to 8.1, there were no problems at all. All names
and properties were successfully changed, as well as if there was no
first installation at all.

But Windows 10 treats the second, newly installed device as a
reinstallation of the first, previously installed one, because their
instance ids and reference strings are the same. All user-defined
endpoint names, default formats and other persistent parameters were
populated from the first installation.

As you can see, each of these INF files had its unique hardware id.
But Windows 10 treats virtual devices installed from them, as
identical.

Could you please explain why Windows 10 ignores hardware ids for
root-enumerated devices (or maybe even for all devices), using only
the beginning parts of their instance ids and their reference strings?
Is it because the comparison is based on interface paths only, and
other device properties are not taken into account?

Regards,
Eugene

******************

WDMAUDIODEV addresses:
Post message: mailto:wdmaudiodev@xxxxxxxxxxxxx
Subscribe:    mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=subscribe
Unsubscribe:  mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=unsubscribe
Moderator:    mailto:wdmaudiodev-moderators@xxxxxxxxxxxxx

URL to WDMAUDIODEV page:
http://www.wdmaudiodev.com/

Other related posts: