BDA Miniport in User-Mode

I want to write a BDA Tuner / Capture driver in User-Mode. Can this be done? If so, can someone direct me to information on how I would accomplish such a thing?

Thanks,
j


“Our deepest fear is not that we are inadequate. Our deepest fear is that we are powerful beyond measure. It is our light, not our darkness, that frightens us most. Your playing small does not serve the world. There is nothing enlightened about shrinking so that people won’t feel insecure around you. It’s not just in some of us; it’s in all of us. And when we let our own light shine, we unconsciously give other people permission to do the same. As we are liberated from our own fear, our presence automatically liberates others.” - Maryanne Williamson


Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com

Jeremy M wrote:

I want to write a BDA Tuner / Capture driver in User-Mode. Can this be done? If so, can someone direct me to information on how I would accomplish such a thing?

You can certainly write a tuner and capture driver in user-mode. I’ve
done it, to support an IP TV device. It won’t be BDA, however. BDA is
a kernel-mode technology – an extension to AVStream.

Also, as we learned through painful experience, user-mode capture
drivers fool everyone except Media Center. The Windows Media Center
application insists on having an actual kernel-mode tuner/capture
driver. I don’t know how it checks, or why, but it does. We ended up
making a dummy KM driver to satisfy MCE.


Tim Roberts, xxxxx@probo.com
Providenza & Boekelheide, Inc.

How did you go about creating a dummy KM driver for MCE? Did you just make it a wrapper to the user mode driver with the appropriate AVStream methods? For example tune requests get passed to the KM driver which then calls out to the User Mode interface through IoReportTargetDeviceChangeAsynchronous with the data required to do the tuning in user mode? How did you handle proxying the user mode packet data from the device in User-Mode to KM, just normal IRP?

Thanks,
J

xxxxx@yahoo.com wrote:

How did you go about creating a dummy KM driver for MCE? Did you just make it a wrapper to the user mode driver with the appropriate AVStream methods? For example tune requests get passed to the KM driver which then calls out to the User Mode interface through IoReportTargetDeviceChangeAsynchronous with the data required to do the tuning in user mode? How did you handle proxying the user mode packet data from the device in User-Mode to KM, just normal IRP?

The dummy KM driver was an old-style stream-class driver, because the
client already had a simple one to use as a starting place. It didn’t
make sense at the time to start over. I used an inverted call mechanism
for the communication (using a KS property instead of an ioctl). I
started out with a named pipe, which worked, mostly, but the inverted
call was more reliable.

The streaming data never flowed through kernel mode. The dummy KM
driver exposed one pin with a unique media type, which forced DirectShow
to bring in our user-mode capture filter. The UM driver could operate
just as well without the dummy KM component (indeed, that’s how it was
used in Media Player).

The UM filter exposed the MPEG2 transport stream. So, the MCE graph had
the KM dummy feeding the UM filter, but the data all originated in the
UM filter. The KM driver only came alive for tune requests.


Tim Roberts, xxxxx@probo.com
Providenza & Boekelheide, Inc.