User-Mode Driver Framework

User-Mode Driver Framework (UMDF) is a device-driver development platform first introduced with Microsoft's Windows Vista operating system, and is also available for Windows XP. It facilitates the creation of drivers for certain classes of devices.

Overview

Standard device drivers can be difficult to write because they must handle a very wide range of system and device states, particularly in a multithreaded software environment. Badly written device drivers can cause severe damage to a system (e.g., BSoD and data corruption) since all standard drivers have high privileges when accessing the kernel directly. The User-Mode Driver Framework insulates the kernel from the problems of direct driver access, instead providing a new class of driver with a dedicated application programming interface at the user level of interrupts and memory management. If an error occurs, the new framework allows for an immediate driver restart without impacting the system. This is particularly useful for devices that are intermittently connected to the system or support hot swapping via a bus technology such as USB or FireWire.

According to Microsoft, UMDF drivers are simpler to write and debug than kernel-mode drivers.[1] However, UMDF would not be used for performance-intensive or highly stateful devices.

The first version of the UMDF was shipped as part of Windows Media Player version 10 on 2004-10-12. Code-named "Crescent", it was designed to support the Media Transfer Protocol driver, and no public interfaces or documentation were provided for it. Later, Microsoft decided to turn UMDF into a device driver development platform.[2]

Version history

Architecture

A UMDF Driver is a DLL based on Microsoft's Component Object Model (COM). However, UMDF does not use COM for loading, unloading, or controlling concurrency; it only uses COM as a programming pattern, for example exploiting COM's IUnknown interface. At startup, UMDF calls DllGetClassObject to get a pointer to an IClassFactory interface in the driver and then uses the CreateInstance method of the IClassFactory interface to create an instance of the driver callback object.

The driver object is an instance of the framework-provided IWDFDriver interface. The driver provides a set of callbacks via the IDriverEntry COM interface, which is the main entry point for driver customization.

gollark: I expect that unless someone invents magic better-material transistors we'll really need to rethink a lot of computing.
gollark: The processors for β, η and α are automatically kept at similar clocks to save power.
gollark: It's all of those averaged.
gollark: It's a 30Gλps (gigalambdas per second) lambda processing unit with 512Gλ (gigalambdas) of lambda access memory.
gollark: It's a strange CPU design but it has its pluses.

See also

References

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.