Windows Driver Foundation (WDF) is a set of Microsoft tools that aid in the creation of high-quality, realiable drivers for Windows 2000 and later versions of Windows.
The primary tools that comprise WDF are the Kernel Mode Driver Framework (KMDF) and User Mode Driver Framework (UMDF). These tool kits provide a new, object-oriented, programming model for Windows driver development. The primary goal of the Frameworks is "Conceptual Scalability", that is the characteristics of only requiring a driver developer to learn a few simple concepts to be able to write a simple driver, and to be able to incrementally learn more as more complex driver features are required. This differs markedly from the Windows Driver Model (WDM) that requires driver developers to be fully familiar with lots of complex technical details before writing even a simple driver.
Part of the key to achieving Conceptual Scalability is that KMDF and UMDF use an "opt-in" model. This model allows the developer to extend and override the default behavior of a canonical "good driver". This is in contrast to the older Windows Driver Model that depends on the driver writer to implement all aspects of the driver's behavior.
The Framework comes in two varieties:
- The Kernel-Mode Driver Framework, for writing standard kernel-mode device drivers.
- The User-Mode Driver Framework, for writing certain classes of driver that can run in user-mode.
These share the underlying programming model. However, the kernel-mode framework uses a flat C API while the user-mode framework is based on C++ and a light version of the COM.
WDF also includes a set of static verification tools for use by driver writers. These tools examine driver code for common errors and/or simulate the code of a driver in order to identify problems that are both difficult to detect and difficult to test for.
The Static Driver Verifier (SDV) is capable of performing very deep validation of code paths across functions and even through calls into WDM. SDV can find driver problems that span multiple function calls and even multiple operations. SDV is designed to be run when the driver is nearing completion.
PREFast for Drivers (PFD) performs more shallow analysis of driver operations. PFD can check for buffer overruns and other common programming errors as well as a number of driver specific problems. Because its scope of operation is within a single function, PFD's run time is much shorter than SDV. Therefore, PFD can be used throughout the driver development process.