I wouldnât use UMDF. Ideally, youâd like to mix your ASIO streams with audio coming from the other Windows APIs (assuming the sample rates as consistent). Iâm not sure how youâd achieve this with UMDF. Even if this isnât a requirement, your company has already spent a non-trivial amount of time getting the kernel-mode audio driver to work. Iâd want to leverage that effort.
ASIO drivers are user-mode COM objects, so the big question is how you want to access the audio and network drivers. For the networking side of things Iâd plan on using the standard windows application-level networking functions from within the ASIO code. I donât think youâre going to be able to get extremely low-latency out of this path regardless of what you do short of writing a custom network device driver (and possibly not even that unless you plan on using QoS functions separate from the rest of the network stack), so you might as well keep things simple. If you donât need to worry about receiving audio, however, and youâre not overly concerned about latency, I have no doubt that you should be able to get something like this to work even with small ASIO buffer sizes.
The audio device path is a little more complicated. In the past, Iâve typically had my kernel-mode driver expose custom ioctls that the ASIO library would use, but another possibility would be to write your ASIO code to use the user-mode kernel streaming functionality. Iâve seen good results with this design in conjunction with USB audio devices, and it avoids a lot of ring 0 nastiness. There is a free ASIO plugin called ASIO4All that does precisely this.
If you havenât done so already, you should download the ASIO SDK from Steinberg. Unfortunately, user-mode kernel streaming has always been a little under-documented, and Microsoft seems to be purging what little existed. If you look around, you should be able to find some sample code, though.
-John
On Apr 21, 2010, at 1:05 PM, xxxxx@gmail.com wrote:
Hi there,
I am a newcomer, total newbie in Windows driver development but willing to read/learn whatever is required to achieve my goal. 
We have host applications that generate sound to output via our specific USB Audio device that presently uses our WHQL-certified INF (to customize the device name in Windows and force some default config) and the standard usbaudio.sys driver.
What I want to achieve is write a custom driver that would either wrap or use the current USB Audio device driver (usbaudio.sys). That driver would output sound either to the USB device via ASIO or UDP through the Ethernet adapter that would be selected in a user-mode application to configure that âvirtualâ device.
I donât want to reinvent the wheel, I know usbaudio.sys works well and ASIO is user-mode so my driver would need to be user-mode. Would UMDF be appropriate for what Iâm trying to achieve? Any pointers on what I should be reading/looking at?
Let me specify that I want a user-mode driver to use ASIO on our own USB Audio device while allowing the audio stream to be output via UDP through Ethernet if the user desires so. Again, I donât seek to reinvent the wheel but have a âvirtualâ device act as a wrapper that would either drive our USB Audio device via ASIO to usbaudio.sys or UDP through an existing Ethernet driver.
Hints, suggestions, etc. are all welcome!
Many thanks in advance.
Alex
NTDEV is sponsored by OSR
For our schedule of WDF, WDM, debugging and other seminars visit:
http://www.osr.com/seminars
To unsubscribe, visit the List Server section of OSR Online at http://www.osronline.com/page.cfm?name=ListServer