16 Mar 2007

MME, WDM, Vista moved audio driver from Kernel to User mode - A Short History

http://blogs.msdn.com/larryosterman/archive/2005/09/19/471346.aspx


The Windows audio system debuted in Windows 3.1 with the "Multimedia Extensions for Windows", or MME APIs. Originally, only one application at a time could play audio, that was because the original infrastructure didn't have support for tracking or mixing audio streams (this is also why the old audio apps like sndrec32 pop up an error indicating that another device is using the audio hardware when they encounter any error).

When Windows 95 (and NT 3.1) came out, the MME APIs were stretched to 32 bits, but the basic infrastructure didn't change - only one application could play audio at one time.
For Windows 98, we deployed an entirely new audio architecture, based on the Windows Driver Model, or WDM. As a part of that architectural change, we added the ability to mix audio streams - finally you could have multiple applications rendering audio at the same time.
There have been numerous changes to the audio stack over the years, but the core audio architecture has remained the same until Vista.

Over the years, we've realized that there three major problem areas with the existing audio infrastructure:

(1) The amount of code that runs in the kernel (coupled with buggy device drivers) causes the audio stack to be one of the leading causes of Windows reliability problems.

(2) It's also become clear that while the audio quality in Windows is just fine for normal users, pro-audio enthusiasts are less than happy with the native audio infrastructure. We've made a bunch of changes to the infrastructure to support pro-audio apps, but those were mostly focused around providing mechanisms for those apps to bypass the audio infrastructure.

(3) We've also come to realize that the tools for troubleshootingaudio problems aren't the greatest - it's just too hard to figure out what's going on, and the UI (much of which comes from Windows 3.1) is flat-out too old to be useful.

Back in 2002, we decided to make a big bet on Audio for Vista and we committed to fixing all three of the problems listed above.

The first (and biggest) change we made was to move the entire audio stack out of the kernel and into user mode. Pre-Vista, the audio stack lived in a bunch of different kernel mode device drivers, including sysaudio.sys, kmixer.sys, wdmaud.sys, redbook.sys, etc. In Vista and beyond, the only kernel mode drivers for audio are the actual audio drivers (and portcls.sys, the high level audio port driver).

The second major change we made was a totally revamped UI for audio. Sndvol32 and mmsys.cpl were completely rewritten (from scratch) to include new, higher quality visuals, and to focus on the common tasks that users actually need to do. All the old functionality is still there, but for the most part, it's been buried deep below the UI.

1 comment:

Anonymous said...

This is great info to know.