WDM Streaming provides a kernel-mode streaming architecture similar to DirectShow, based on the common Windows Driver Model in Windows 98 and Windows 2000. It provides a high-bandwidth, low-latency communication mechanism between WDM device drivers and is used for audio and video devices at present.
WDM Streaming uses DirectShow to do the graph building. Each WDM Streaming device is represented by a DirectShow filter in user mode, and the graph building and application interfaces all interact with the user-mode filters. Once the graph is started, however, the kernel-mode components can communicate directly (by shared kernel-mode memory, for example). This scheme allows communication in a generic manner between filters at a much higher performance level than would be achieved if transitions to and from kernel mode were required.
WDM Streaming filters are based on the standard i/o request packet model. The interfaces and methods used by DirectShow are replaced by IOCTL codes and property sets, but other than that, the models are very similar, with buffer allocators, reference clocks and media types behaving in a similar manner. The graph of connected kernel-mode filters is built as a stack of layered device drivers.
The architecture of WDM Streaming is very similar to DirectShow in most aspects, but there are some significant differences:
The KSProxy user mode component creates DirectShow filters for each WDM Streaming filter, with a pin for each pin factory. If the pin is connected to a user-mode component, data is transferred to and from user mode; if the pin is connected directly to another WDM Streaming component, the data will be transferred directly in kernel mode. The DirectShow filter supports plug-ins to extend the functionality in user mode based on the property sets supported by the device. A COM plug-in can be defined that creates a user-mode COM interface for any component that supports a specific kernel-mode property set, and a property page plug-in can be defined to provide a UI.
Device Driver Topics