What's New for WDF Drivers in Windows 10

This topic summarizes the new features and improvements for Windows Driver Frameworks (WDF) drivers in Windows 10.

Windows 10 includes Kernel-Mode Driver Framework (KMDF) version 1.15 and User-Mode Driver Framework (UMDF) version 2.15.

You can use these framework versions to build drivers for:

  • Windows 10 for desktop editions (Home, Pro, and Enterprise)
  • Windows 10 Mobile
  • Windows 10 IoT Core
  • Windows Server 2016 Technical Preview

For version history, see KMDF Version History and UMDF Version History. Except where noted, UMDF references on this page describe version 2 functionality that is not available in UMDF version 1.

WDF source code is now publicly available

  • The WDF source code is now available as open source on GitHub. This is the same source code from which the WDF runtime library that ships in Windows 10 is built. You can debug your driver more effectively when you can follow the interactions between the driver and WDF. Download it from http://github.com/Microsoft/Windows-Driver-Frameworks.

  • The private symbol files for WDF on Windows 10 are now available through the Microsoft Symbol Server.

  • The Windows Driver Kit (WDK) 10 samples are also now published to GitHub. Download them from http://github.com/Microsoft/Windows-Driver-Samples.

Automatic Source Level Debugging of Framework Code

When you use WinDbg to debug a WDF driver on Windows 10, WinDbg automatically retrieves the framework source code from Microsoft's public GitHub repository. You can use this feature to step through the WDF source code while debugging, and to learn about framework internals without downloading the source code to a local machine. For more information, see New support for source-level debugging of WDF code in Windows 10 and Debugging with WDF Source.

Universal Driver Compliance

All WDF driver samples and Visual Studio driver templates are Universal Windows driver compliant.

All KMDF and UMDF 2 functionality is Universal Windows driver compliant.

Note that UMDF 1 drivers run only on Windows 10 for desktop editions and earlier versions of desktop Windows. Want to benefit from the universal capabilities of UMDF 2? To learn how to port your old UMDF 1 driver, see Porting a Driver from UMDF 1 to UMDF 2.

Debugging and Diagnosability

  • All KMDF and UMDF 2 drivers can use the new always on, always available Inflight Trace Recorder (IFR). When a driver provides a custom trace, the driver IFR log contains the trace messages. Note that the new driver IFR log is separate from the framework IFR log that WDF creates for each driver.

    It's easy to turn on the IFR. See Inflight Trace Recorder (IFR) for logging traces and Using Inflight Trace Recorder in KMDF and UMDF Drivers.

  • The IFR maintains a circular buffer of WPP traces in non-pageable memory. If a driver crashes, the logs are frequently included in the crash dump file.

  • If you turn on the IFR in your driver binary, the IFR is present and running during the lifetime of your driver. You don't need to start an explicit trace collection session.

    • IFR logs are included in minidump files except when the responsible driver is undetermined or if the crash was a host timeout.

    • You can access both the driver and framework IFR logs by issuing !wdfkd.wdflogdump. (Note that !rcdrkd.rcdrlogdump is no longer needed for this.)

    • When debugging a UMDF driver, you can merge framework logs with driver logs by issuing: !wdfkd.wdflogdump <drivername.dll> -m

  • UMDF logs (WudfTrace.etl) and dumps are now located in %ProgramData%\Microsoft\WDF instead of %systemDrive%\LogFiles\Wudf.

  • New debugger command: !wdfkd.wdfumtriage provides a kernel-centric view of all UMDF devices on the system.

  • You can run !analyze to investigate UMDF verifier failures or UMDF unhandled exceptions. This works for live kernel debugging as well as debugging user crash dump files from %ProgramData%\Microsoft\WDF.

  • In KMDF and UMDF 2, you can monitor power reference usage in the debugger. For info, see Debugging Power Reference Leaks in WDF.

  • You can use !wdfkd.wdfcrashdump to display error information about UMDF 2 drivers. For more information, see !wdfkd.wdfcrashdump.

New Performance Tracing tool for WDF drivers

You can use the Windows Performance Toolkit (WPT) to view performance data for a given KMDF or UMDF 2 driver. When tracing is enabled, the framework generates ETW events for I/O, PnP, and Power callback paths. You can then view graphs in the Windows Performance Analyzer (WPA) that show I/O throughput rates, CPU utilization, and callback performance. The WPT is included in the Windows Assessment and Deployment Kit (ADK).

For more information, see New Performance Tools for WDF Drivers in Windows 10 and Using the Windows Performance Toolkit (WPT) with WDF.

Additional support for HID drivers in UMDF

  • UMDF now fully supports HID filters (enumerated by HIDClass) and minidrivers. Simply port your existing KMDF driver or write a new UMDF 2 filter; the functionality is automatically enabled.

  • UMDF HID minidrivers that are enumerated by ACPI can perform selective suspend. For more information, see Creating WDF HID Minidrivers.

  • UMDF drivers can now be installed in the HID stack for low latency input devices such as touch and mouse. A driver for an input device should specify the UmdfHostPriority INF directive. For information, see Specifying WDF Directives in INF Files.

Support for interrupts for GPIO-backed devices

UMDF no longer requires WinUSB

New support has been added for USB drivers in UMDF. A UMDF 2 USB driver no longer uses WinUSB. To use the new functionality, the driver sets the UmdfDispatcher directive to NativeUSB, instead of WinUSB. See Specifying WDF Directives in INF Files.

DDI Updates

  • For KMDF and UMDF 2, the new WdfDeviceOpenDevicemapKey method allows a driver to access subkeys and values under HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP.

  • A UMDF driver can call WdfIoTargetWdmGetTargetFileHandle to obtain a file handle to the next-lower kernel-mode driver in its stack. The driver can write data to that handle, bypassing the framework's abstractions for sending I/O to the local I/O target.

  • A UMDF driver can request that the underlying bus driver re-enumerate it. See WdfDeviceSetFailed.

  • Setting the UmdfDirectHardwareAccess directive is no longer always necessary for devices that have connection resources. See Specifying WDF Directives in INF Files.

Improved Performance

  • UMDF system components consume less disk space.

  • KMDF and UMDF drivers use less non-paged memory.

  • Improved framework version checking reduces header/library mismatches.

  • UMDF provides improved buffer mapping for HID transfers.



Send comments about this topic to Microsoft

© 2015 Microsoft