Getting Started with UMDF
This section describes User-Mode Driver Framework (UMDF) and details the differences between UMDF versions 1 and 2. It also provides high-level architectural information about UMDF. Use this section to determine if a UMDF driver is the right choice for your needs, and to decide which UMDF version to use.
Windows Driver Frameworks (WDF) contains UMDF, a framework for the creation of user-mode drivers. Like Kernel-Mode Driver Framework (KMDF), UMDF provides an abstraction layer from WDM, handling much of the Plug and Play (PnP) and power management functionality, and allowing the driver to opt in for specific functionality and event handling.
In Windows 8.1 onward, there are two major versions of UMDF, versions 1 and 2. UMDF version 1.11 (one dot eleven) is the most recent version of UMDF version 1, and is the final version before the advent of UMDF 2. For a table showing full version info and operating system relevance, see UMDF Version History.
Writing a driver using UMDF version 1 requires using the COM programming model to write C++ code. While UMDF version 1 is based on the same conceptual driver programming model as KMDF, UMDF 1 implements the model with different components, device driver interfaces (DDIs), and data structures.
In contrast, starting in UMDF version 2, you can write a UMDF driver in the C programming language that calls many of the methods that are available to KMDF drivers. All of the interfaces that are shared between UMDF version 2 and KMDF have the same names, parameters, and structure definitions. If your driver uses only shared functionality, or uses conditional macros around calls that are only supported in one framework, you can write a single driver that you can compile with either UMDF or KMDF. For more information, see How to generate a UMDF driver from a KMDF driver.
While there is significant commonality between UMDF 2 and KMDF, there is still a small amount of functionality that is available only in one framework or the other. For specifics, see Comparing UMDF 2 Functionality to KMDF. For a list of all UMDF 2 and KMDF callbacks and methods and which framework(s) they apply to, see Summary of WDF Callbacks and Methods. In a few cases, a structure member or parameter of a method applies only to one framework or the other. The documentation describes these differences on the corresponding reference pages.
You must choose one or the other; you cannot write a UMDF driver that calls methods from both UMDF versions 1 and 2.
UMDF version 2 drivers run only on Windows 8.1 or later. If you need to write a UMDF driver that runs on operating systems earlier than Windows 8.1, you need to write a UMDF 1.x driver. You can use version 1.11 to build drivers that run on Windows Vista and later. For more info on version 1, see UMDF 1.x Design Guide. This section describes UMDF version 2.
In this section
WDF is a set of libraries that you can use to write device drivers that run on the Windows operating system. WDF defines a single driver model that is supported by two frameworks: KMDF and UMDF. This topic provides answers to frequently asked questions about UMDF.
This topic describes the advantages of writing a UMDF driver instead of a kernel-mode driver.
This topic provides a high-level overview of UMDF components and describes how your driver interacts with system-supplied components. It applies to both UMDF versions 1 and 2.
This topic describes the UMDF driver host process and how it works with other UMDF components. It applies to both UMDF versions 1 and 2.
This topic describes how the driver manager builds a user-mode device stack, and how the host process, reflector, and driver manager process an I/O request that an application sends to a UMDF driver.
This topic compares the functionality available to a KMDF driver with that available to a UMDF 2 driver. It is designed to help you decide whether you should write a UMDF 2 driver or a KMDF driver.
This topic describes how to convert a KMDF driver into a UMDF version 2 driver, and vice-versa.
This topic describes how to port a UMDF 1 driver to UMDF 2. You can start with a UMDF 1 driver that uses Sources/Dirs files (not a Visual Studio project), or you can convert a UMDF 1 driver that is contained in a Visual Studio project. The result will be a UMDF 2 driver project in Visual Studio. UMDF 2 drivers run on both Windows 10 for desktop editions (Home, Pro, Enterprise, and Education) and Windows 10 Mobile.