Have you tried adding uniquifying information into the reference string as
suggested below?
From: Vincent Burel (VB-Audio)<mailto:vincent.burel@xxxxxxxxxxxx>
Sent: Sunday, June 14, 2020 1:23 AM
To: wdmaudiodev@xxxxxxxxxxxxx<mailto:wdmaudiodev@xxxxxxxxxxxxx>
Cc: Gary Daniels<mailto:Gary.Daniels@xxxxxxxxxxxxx>; 'Jerry
Evans'<mailto:jerry@xxxxxxxxxxx>
Subject: [EXTERNAL] [wdmaudiodev] Same problem with WIN10 update 2004
Hello,
With WIN10 2004 update, we are getting same problem again where audio device
drivers are possibly badly reinstalled as described in the thread below
Consequently, audio stack is in such mess after WIN10 update that many users
can get many problems with audio …
Note we talk about this problem since several years now and we think it’s time
to fix it. Thanks by advance!
Regards
Vincent Burel
De : wdmaudiodev-bounce@xxxxxxxxxxxxx [mailto:wdmaudiodev-bounce@xxxxxxxxxxxxx] ;
De la part de Vincent Burel (VB-Audio)
Envoyé : mercredi 29 janvier 2020 10:39
À : wdmaudiodev@xxxxxxxxxxxxx
Cc : 'Gary Daniels'; 'Jerry Evans'
Objet : [wdmaudiodev] Re: [EXTERNAL] Re: Typical audio problem with WIN10 update
Gary, Matthew, …
We need a response to my question of my last post, especially my last question.
95% of our user support is pending on this problem, where pin name and icon are
mixed in several independent drivers after WIN10 update.
We got a track here regarding REFERENCE STRING… I’ve seen that many
manufacturers are using the same “Wave” reference string (including Microsoft
e.g. wdma_bt.inf)
AddInterface=%KSCATEGORY_AUDIO%,"Topo",MyDriver.I.Topo
AddInterface=%KSCATEGORY_AUDIO%,"Wave", MyDriver.I.Wave
But I’ve also seen some manufacturers using GUID string instead of explicit or
generic REFERENCE STRING (wondering how they got this idea ?).
So I re-write my question:
Audio DRIVER using the same reference string (“wave”) might interact together
during WIN10 update and exchange pin name and icon ?
Is it possible ? if yes, it is a bug in Windows Audio driver installation
process, could it be corrected ASAP ?
Regards
Vincent Burel
De : wdmaudiodev-bounce@xxxxxxxxxxxxx<mailto:wdmaudiodev-bounce@xxxxxxxxxxxxx>
[mailto:wdmaudiodev-bounce@xxxxxxxxxxxxx] De la part de Vincent Burel ;(VB-Audio)
Envoyé : jeudi 23 janvier 2020 08:20
À : wdmaudiodev@xxxxxxxxxxxxx<mailto:wdmaudiodev@xxxxxxxxxxxxx>
Cc : 'Gary Daniels'; 'Jerry Evans'
Objet : [wdmaudiodev] Re: [EXTERNAL] Re: Typical audio problem with WIN10 update
Well, this is not clear at all.
I remind you we are talking about audio driver having unique HardwareID and
unique ReferenceString (“Wave”) for its capture and render pins…
for a declaration like this in INF file:
AddInterface=%KSCATEGORY_AUDIO%,"Topo",MyDriver.I.Topo
AddInterface=%KSCATEGORY_AUDIO%,"Wave", MyDriver.I.Wave
AddInterface=%KSCATEGORY_CAPTURE%,"Wave", MyDriver.I.Wave
AddInterface=%KSCATEGORY_RENDER%,"Wave", MyDriver.I.Wave
And in adapter.cpp the call to InstallSubdevice in StartDevice function.
InstallSubdevice(DeviceObject, Irp, L"Topology",…
InstallSubdevice(DeviceObject, Irp, L"Wave",
FIRST QUESTION:
Is it the way it goes or not ? Do we have something to correct in these lines
above ?
SECOND QUESTION:
Our driver (and most virtual audio driver) are not made to be installed twice.
Are you suggesting that the driver can be installed twice anyway in a
installation process or WIN10 update process ?
LAST QUESTION:
The original subject is the mess in audio driver pin name and icon after win10
update. More precisely, we talk about a mess between different drivers
(possible from different manufacturers): That a driver A could take the pin
name of a Driver B after a Windows 10 update. Are you trying to explain this
problem , or are you talking about something else ?
Regards
Vincent Burel
De : Gary Daniels [mailto:Gary.Daniels@xxxxxxxxxxxxx]
Envoyé : mercredi 22 janvier 2020 22:46
À : Jerry Evans; wdmaudiodev@xxxxxxxxxxxxx<mailto:wdmaudiodev@xxxxxxxxxxxxx>;
'Vincent Burel (VB-Audio)'
Objet : Re: [wdmaudiodev] Re: [EXTERNAL] Re: Typical audio problem with WIN10
update
To be clear, the string "sysvad_tabletaudiosample" originates from the inf
file. The full string I provided is an example of a PNP interface path, which
is defined by PNP, not the driver.
So, to be utterly clear. If you have a software audio driver and give it an id
of "novadsp.com" inside of the inf and you only ever have to install this
driver in a system a single time, then it will work for upgrades.
If this driver is installed more than once, say for two different instances of
a virtual patch cable, it will break.
Sent from Outlook<http://aka.ms/weboutlook>
From: wdmaudiodev-bounce@xxxxxxxxxxxxx<mailto:wdmaudiodev-bounce@xxxxxxxxxxxxx>
<wdmaudiodev-bounce@xxxxxxxxxxxxx<mailto:wdmaudiodev-bounce@xxxxxxxxxxxxx>> on
behalf of Jerry Evans <jerry@xxxxxxxxxxx<mailto:jerry@xxxxxxxxxxx>>
Sent: Wednesday, January 22, 2020 11:32 AM
To: wdmaudiodev@xxxxxxxxxxxxx<mailto:wdmaudiodev@xxxxxxxxxxxxx>
<wdmaudiodev@xxxxxxxxxxxxx<mailto:wdmaudiodev@xxxxxxxxxxxxx>>; 'Vincent Burel
(VB-Audio)' <vincent.burel@xxxxxxxxxxxx<mailto:vincent.burel@xxxxxxxxxxxx>>
Subject: [wdmaudiodev] Re: [EXTERNAL] Re: Typical audio problem with WIN10
update
Hi Gary
I’m not actually shipping any sysvad drivers but just to be utterly clear here 😊
Using your example:
\\?\root#sysvad_tabletaudiosample#0001#{6994ad04-93ef-11d0-a3cc-00a0c9223196}\wavespdif<https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Foutlook.office.com%2F%3F%255Chdaudio%23func_01%26ven_1002%26dev_aa01%26subsys_00aa0100%26rev_1007%235%261ccdf6ec%260%260001%23%257B6994ad04-93ef-11d0-a3cc-00a0c9223196%257D%255Ce1hdmiouttopo&data=02%7C01%7CMatthew.van.Eerde%40microsoft.com%7Cbb6fc236101343c5d66808d8103c430e%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637277198363016217&sdata=rMHhjbl8Sm1PzfhnTLbvgLwUDbanl9YCsvguRYEro8s%3D&reserved=0>
To avoid the collision you describe, and given a TLD I know to be unique, I’d
need to define the path string in the following way?
\\?\root#novadsp.com#0001#{6994ad04-93ef-11d0-a3cc-00a0c9223196}\wavespdif<file://%3f/root%23novadsp.com%230001%23%7b6994ad04-93ef-11d0-a3cc-00a0c9223196%7d/wavespdif>
MTIA.
Jerry
From: wdmaudiodev-bounce@xxxxxxxxxxxxx<mailto:wdmaudiodev-bounce@xxxxxxxxxxxxx>
<wdmaudiodev-bounce@xxxxxxxxxxxxx<mailto:wdmaudiodev-bounce@xxxxxxxxxxxxx>> On
Behalf Of Gary Daniels (Redacted sender "Gary.Daniels" for DMARC)
Sent: 22 January 2020 18:20
To: Vincent Burel (VB-Audio)
<vincent.burel@xxxxxxxxxxxx<mailto:vincent.burel@xxxxxxxxxxxx>>;
wdmaudiodev@xxxxxxxxxxxxx<mailto:wdmaudiodev@xxxxxxxxxxxxx>
Subject: [wdmaudiodev] Re: [EXTERNAL] Re: Typical audio problem with WIN10
update
The string needs to be unique for all instance of a driver with the same
hardware id.
Lets say you install the sysvad driver twice in a system as a root enumerated
software driver without a unique hardware id. Before an OS upgrade you give
each sysvad endpoint on these two drivers some user customizations. After the
upgrade you'll still see two instances of the driver installed, but the audio
settings will be jumbled.
If you take the sample code and create a software driver using the generic wave
and topology names provided in the sample and don't change it, and some other
developer does the same, and they're both root enumerated software drivers,
then the settings between those two driver will get jumbled on upgrade.
Going back to the string I showed below:
\\?\root#sysvad_tabletaudiosample#0001#{6994ad04-93ef-11d0-a3cc-00a0c9223196}\wavespdif<https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Foutlook.office.com%2F%3F%255Chdaudio%23func_01%26ven_1002%26dev_aa01%26subsys_00aa0100%26rev_1007%235%261ccdf6ec%260%260001%23%257B6994ad04-93ef-11d0-a3cc-00a0c9223196%257D%255Ce1hdmiouttopo&data=02%7C01%7CMatthew.van.Eerde%40microsoft.com%7Cbb6fc236101343c5d66808d8103c430e%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637277198363016217&sdata=rMHhjbl8Sm1PzfhnTLbvgLwUDbanl9YCsvguRYEro8s%3D&reserved=0>
The piece between the first and second hash marks is part of the comparison,
the piece between the second and third is not. Depending on how you author the
inf and do the driver install I have seen instances where the portion between
the first and second hash is empty, it's simply
"\\?\root##0001#...<file://%3f/root%23%230001%23...>".
If you carefully author your inf's and install the driver so that the string
between the first and second hash marks is unique and you only use it once,
then that will also work, you can reuse the reference string. If you're
installing your driver more than once and the piece between the first and
second hash is not unique or missing entirely, then the reference string must
be unique.
Sent from Outlook<http://aka.ms/weboutlook>
From: Vincent Burel (VB-Audio)
<vincent.burel@xxxxxxxxxxxx<mailto:vincent.burel@xxxxxxxxxxxx>>
Sent: Wednesday, January 22, 2020 6:42 AM
To: wdmaudiodev@xxxxxxxxxxxxx<mailto:wdmaudiodev@xxxxxxxxxxxxx>
<wdmaudiodev@xxxxxxxxxxxxx<mailto:wdmaudiodev@xxxxxxxxxxxxx>>
Cc: Gary Daniels <Gary.Daniels@xxxxxxxxxxxxx<mailto:Gary.Daniels@xxxxxxxxxxxxx>>
Subject: RE: [wdmaudiodev] Re: [EXTERNAL] Re: Typical audio problem with WIN10
update
Gary, to be sure about what you say :
You are explaining that %KSNAME_WaveSpeaker% and %KSNAME_TopologySpeaker%
Must be unique Reference String, regarding all drivers in the world ? to avoid
the re-installation problem we are talking about
Meaning that potentially all drivers using the same
KSNAME_WaveSpeaker = « Wave »
KSNAME_TopologySpeaker = « Topology »
Could interact together and create problem during any installation process ?
This is what you are saying ?
Regards
Vincent Burel
De : wdmaudiodev-bounce@xxxxxxxxxxxxx<mailto:wdmaudiodev-bounce@xxxxxxxxxxxxx>
[mailto:wdmaudiodev-bounce@xxxxxxxxxxxxx] De la part de Gary Daniels ;(Redacted
sender "Gary.Daniels" for DMARC)
Envoyé : mardi 21 janvier 2020 23:41
À : Vincent Burel (VB-Audio);
wdmaudiodev@xxxxxxxxxxxxx<mailto:wdmaudiodev@xxxxxxxxxxxxx>
Objet : [wdmaudiodev] Re: [EXTERNAL] Re: Typical audio problem with WIN10 update
Now I understand where the miscommunication is about reference string.
From the sample inf:
AddInterface=%KSCATEGORY_AUDIO%, %KSNAME_WaveSpeaker%, SYSVAD.I.WaveSpeaker
AddInterface=%KSCATEGORY_RENDER%, %KSNAME_WaveSpeaker%, SYSVAD.I.WaveSpeaker
AddInterface=%KSCATEGORY_REALTIME%, %KSNAME_WaveSpeaker%, SYSVAD.I.WaveSpeaker
AddInterface=%KSCATEGORY_AUDIO%, %KSNAME_TopologySpeaker%,
SYSVAD.I.TopologySpeaker
AddInterface=%KSCATEGORY_TOPOLOGY%, %KSNAME_TopologySpeaker%,
SYSVAD.I.TopologySpeaker
%KSNAME_WaveSpeaker% and %KSNAME_TopologySpeaker% are the reference strings for
these interfaces.
These strings have to match the interfaces that are registered with pnp from
the driver. In the sysvad sample the string used with PNP to register the
interface is in the ENDPOINT_MINIPAIR. So, changing in just the inf or just in
the driver is not enough, they need to be changed in both and need to match.
If you take a look in the mmdevice registry store for sysvad, you'll see
something like this data value for one of the property keys. This is the device
interface path. In this case wavespdif is the reference string.
\\?\root#sysvad_tabletaudiosample#0001#{6994ad04-93ef-11d0-a3cc-00a0c9223196}\wavespdif<https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Foutlook.office.com%2F%3F%255Chdaudio%23func_01%26ven_1002%26dev_aa01%26subsys_00aa0100%26rev_1007%235%261ccdf6ec%260%260001%23%257B6994ad04-93ef-11d0-a3cc-00a0c9223196%257D%255Ce1hdmiouttopo&data=02%7C01%7CMatthew.van.Eerde%40microsoft.com%7Cbb6fc236101343c5d66808d8103c430e%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637277198363026213&sdata=hhgascD0ruylzD5ql4EXvkm4dO7E4tNKPs3KupP3JXs%3D&reserved=0>
On a system exhibiting the upgrade problems, go through all of your audio
endpoints in mmdevices\audio\ and grab a copy of the interface path w/
reference string, I expect that you'll find that the strings are practically
identical across all of the endpoints getting jumbled.
The portion of the string between the 2nd and 3rd hash marks is ignored, as it
can change across OS upgrades. This means that from an OS upgrade perspective:
\\?\root#sysvad_tabletaudiosample#0001#{6994ad04-93ef-11d0-a3cc-00a0c9223196}\wavespdif<https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Foutlook.office.com%2F%3F%255Chdaudio%23func_01%26ven_1002%26dev_aa01%26subsys_00aa0100%26rev_1007%235%261ccdf6ec%260%260001%23%257B6994ad04-93ef-11d0-a3cc-00a0c9223196%257D%255Ce1hdmiouttopo&data=02%7C01%7CMatthew.van.Eerde%40microsoft.com%7Cbb6fc236101343c5d66808d8103c430e%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637277198363036207&sdata=sMlp4dlcPzNngHT6Ma9pIdhhwOgjs%2BNdC%2FSanJ6jW4s%3D&reserved=0>
==
\\?\root#sysvad_tabletaudiosample#0002#{6994ad04-93ef-11d0-a3cc-00a0c9223196}\wavespdif<https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Foutlook.office.com%2F%3F%255Chdaudio%23func_01%26ven_1002%26dev_aa01%26subsys_00aa0100%26rev_1007%235%261ccdf6ec%260%260001%23%257B6994ad04-93ef-11d0-a3cc-00a0c9223196%257D%255Ce1hdmiouttopo&data=02%7C01%7CMatthew.van.Eerde%40microsoft.com%7Cbb6fc236101343c5d66808d8103c430e%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637277198363036207&sdata=sMlp4dlcPzNngHT6Ma9pIdhhwOgjs%2BNdC%2FSanJ6jW4s%3D&reserved=0>
It's this ignored portion between the 2nd and 3rd hash marks which can change
during upgrade that causes issues with upgrading software devices when there
are multiple instances of the driver installed. With multiple instances of the
same software driver, the contents between the 2nd and 3rd hash marks is the
only part that is different.
I don't know if the following will be useful or not. If you take a look at the
Bluetooth sideband implementation in sysvad, you'll see something special
there. The INF and the endpoint_minipairs don't line up. In the endpoint
minipair structure the reference string is NULL. Instead there is different
value, a reference string template entry with a name like BTHHFP_MIC_TOPO_NAME.
The inf adds an interface named BTHHFP_MIC_TOPO_NAME, but that interface isn't
ever activated, it's used as a template. Instead, Bluetooth sideband uses a
runtime generated string for the reference string. We need a runtime generated
string to ensure that every paired Bluetooth peripheral retains its own
settings for format, name, etc. The string we use is the mac address for the
Bluetooth peripheral that is paired. It's repeatable and unique to the
peripheral. At activation time, the registry keys added via inf for
BTHHFP_MIC_TOPO_NAME are copied over. This way you can register APO's and set
endpoint property keys in the INF, before the reference strings are known and
they get copied to the right locations at runtime. This is one example of a way
to do a unique reference string chosen at runtime.
For your other statement about windows updates not creating a new driver.
Windows update has always installed the drivers new for upgrade. Back in the
Win 9x days (before my time) I've been told that the PNP system didn't have a
concept of migrating down-level os settings. It installed everything fresh for
an OS upgrade and then the multimedia class installer, a multimedia component,
not PNP, performed the migration of audio driver settings from the old drivers
to the new drivers. If the networking team wanted to migrate driver settings,
then they would have had to create their own component to migrate their PNP
settings for their drivers. Nowadays PNP still installs new, and then performs
a migration for all the drivers. So, originally the audio stack migrated
everything, PNP and audio settings. Then sometime in the win7 days (also before
me) PNP created a standard migration solution and the process split into two,
with PNP performing its part and the audio stack performing its part. The key
piece here is that even back in the 9x days the driver was a new install after
upgrade, which broke the connection from the device interfaces to the audio
interfaces. So, mmci back then used the same logic that is still used today to
match the pre-upgrade data to the post-upgrade driver and perform the
migration. It may not look like it's a new install to the driver, but it is.
Read through the setupapi logs, you'll see that it copies forward the driver
store, performs an install, and then migrates settings from old to new.
Eugene, You are correct, changing the reference string is not a valid
workaround for format issues. Back in the original mail last year I
specifically called out that it is not OK to tie the reference string to the
format. The reference string needs to be static because changing it breaks the
users default endpoint selections, loses their customizations, etc. Changing
the reference string only makes sense if it's a different audio endpoint, like
the Bluetooth example above. I'd recommend filing a feedback with a repro of
any situations you find where firing the KSEVENT_PINCAPS_FORMATCHANGE event
didn't work as expected. Include your expectations and what you actually saw
happen. If you send me the link to the feedback (gary.daniels at Microsoft),
I'll forward it to the owners of audiosrv.
Hope that helps,
-Gary
Sent from Outlook<http://aka.ms/weboutlook>
From: wdmaudiodev-bounce@xxxxxxxxxxxxx<mailto:wdmaudiodev-bounce@xxxxxxxxxxxxx>
<wdmaudiodev-bounce@xxxxxxxxxxxxx<mailto:wdmaudiodev-bounce@xxxxxxxxxxxxx>> on
behalf of Vincent Burel (VB-Audio)
<vincent.burel@xxxxxxxxxxxx<mailto:vincent.burel@xxxxxxxxxxxx>>
Sent: Sunday, January 19, 2020 11:38 PM
To: wdmaudiodev@xxxxxxxxxxxxx<mailto:wdmaudiodev@xxxxxxxxxxxxx>
<wdmaudiodev@xxxxxxxxxxxxx<mailto:wdmaudiodev@xxxxxxxxxxxxx>>
Subject: [wdmaudiodev] Re: [EXTERNAL] Re: Typical audio problem with WIN10
update
Hello Gary,
Just to repeat my question with more precisions:
In the INF file, all the following strings are unique and different for all our
virtual audio drivers
DeviceName
HardwareId
ServiceName
DriverFile
INPUTGUID
OUTPUTGUID
NAMELine1
INPUTNAME
OUTPUTNAME
In Source files, all GUID are also unique and different for all our virtual
audio drivers
// interface GUID
//Friendly name line-in
//Friendly name line-out
So, what REFERENCE STRING are you talking about ?
Regards
Vincent Burel
De : wdmaudiodev-bounce@xxxxxxxxxxxxx<mailto:wdmaudiodev-bounce@xxxxxxxxxxxxx>
[mailto:wdmaudiodev-bounce@xxxxxxxxxxxxx] De la part de Vincent Burel ;(VB-Audio)
Envoyé : vendredi 17 janvier 2020 21:04
À : wdmaudiodev@xxxxxxxxxxxxx<mailto:wdmaudiodev@xxxxxxxxxxxxx>
Objet : [wdmaudiodev] Re: [EXTERNAL] Re: Typical audio problem with WIN10 update
Hello,
Thanks to come back to this, but
1- Before WIN10 there was no automatic update with audio driver
re-installation.
2- All our hardware ID are unique for each driver of course… so what
reference string are you talking about exactly ? where it is supposed to be in
the source code ? in the inf file ? what are you talking about ?
Also the problem does not affect our audio driver only, the pin and icon name
confusing can happen with other audio drivers as well…
You may check this problem with more attention, because I don’t think it’s
exclusively driver related…
Regards
Vincent Burel
De : wdmaudiodev-bounce@xxxxxxxxxxxxx<mailto:wdmaudiodev-bounce@xxxxxxxxxxxxx>
[mailto:wdmaudiodev-bounce@xxxxxxxxxxxxx] De la part de Gary Daniels ;(Redacted
sender "Gary.Daniels" for DMARC)
Envoyé : vendredi 17 janvier 2020 19:31
À : Matthew van Eerde;
wdmaudiodev@xxxxxxxxxxxxx<mailto:wdmaudiodev@xxxxxxxxxxxxx>
Objet : [wdmaudiodev] Re: [EXTERNAL] Re: Typical audio problem with WIN10 update
Hi Vincent,
Please refer back to the instructions given to you in the 1/31/19 thread.
At the time your complaint was that the audio endpoint settings were being
mixed up after uninstall and reinstall. I broke this complaint into two pieces,
settings not being removed and settings getting mixed up.
I explained at the time that the change to retain the settings upon uninstall
was intended to make the system behave more consistently by making uninstall
and reinstall behave the same as upgrade, and also to fix customer issues with
lost settings during upgrade. After that discussion, I was able to find a way
to solve the issue with lost user settings on upgrade while also retaining the
manual uninstallation behavior which you and others had come to expect, so the
current release of windows removes user settings when the audio driver is
uninstalled.
As I said at the time: "I understand that you are talking about uninstall and
reinstall, however please understand that your customers are going to see the
same behavior you're seeing right now for uninstall and reinstall whenever they
do an OS upgrade, and would have seen this behavior on all prior OS versions on
OS upgrade."
So, now your complaint is that you're seeing the settings mix up on OS upgrades
and it happens on all of the versions of Windows you've checked, exactly as I
said last year. The issue you are seeing with upgrades is by design, it is how
the OS upgrade system works, how it has always worked, and will not be
changing. Now that I've changed driver uninstall to remove the settings, as
requested, you're going to have a much more difficult time validating your
driver fix to handle OS upgrades because OS upgrades and driver uninstall and
reinstall once again behave differently.
I directed you to solving the settings mix up by using unique reference
strings. I provided lots of explanation on how upgrades work why this is
necessary, summarized here:
"> The fix should be obvious now. For root enumerated software
devices, because it lacks a hardware ID, the OS has a limitation
that reference strings must be unique to ensure that settings aren't
mixed up on OS upgrades and driver updates."