Windows Driver Kit: Getting Started with Windows Drivers
Choosing a Driver Model
The Microsoft Windows Driver Kit (WDK) supports several driver models, or sets of interfaces. A driver that is designed to use a particular driver model must use the model's interfaces. The WDK supports the following driver models:
- Windows Driver Model
- Most Windows drivers are kernel-mode drivers that conform to the Windows Driver Model (WDM). WDM drivers use a set of interfaces that enable the driver to communicate with kernel-mode Windows components, such as the I/O manager and the Plug and Play (PnP) manager. For more information about WDM, see Windows Driver Model.
- Kernel-Mode Driver Framework
- Kernel-Mode Driver Framework (KMDF) is a library that you can use to create WDM drivers. KMDF provides a set of interfaces that are easier to use than WDM interfaces. For more information about KMDF, see Getting Started with Kernel-Mode Driver Framework.
- User-Mode Driver Framework
- User-Mode Driver Framework (UMDF) enables you to write user-mode drivers for some types of devices. If UMDF supports your device type, you should write a user-mode driver instead of a kernel-mode driver. For more information about UMDF and the types of devices that UMDF supports, see Introduction to UMDF.
- Device type–specific models
- Drivers for some types of devices must use a driver model that is specific to the device type. These drivers communicate with Microsoft-supplied drivers (such as kernel-mode class or port drivers or user-mode drivers) that provide their own sets of interfaces. To find out if a type-specific driver model exists for your device, see the device-type specific documentation within the Device and Driver Technologies section of the WDK documentation.
In general, you should develop a user-mode driver or application, if user-mode interfaces provide the capabilities that your driver requires. User-mode interfaces include UMDF and some technology-specific, user-mode interfaces such as WinUSB for USB devices and Windows Portable Devices (WPD) for portable devices.
The next-best choice is a KMDF-based kernel-mode driver. If your device requires a kernel-mode, device type–specific model that KMDF does not support, use the device type–specific model instead of KMDF. Finally, if no other model works for your device, you can develop a WDM-based kernel-mode driver.
Regardless of the driver model that you decide to use, you must read the technology-specific section of the WDK documentation to understand how your driver must communicate with other drivers for your device.
The following table lists some common device types and the driver models that you should typically use for those device types. Use the links under More Information to find information about the driver interfaces for each device type.
| Device or Driver type | Recommended Driver Model | More Information |
| 1394 device | Depends on device setup class: KMDF or WDM |
The IEEE 1394 Driver Stack |
| Audio devices | AVStream, PortCls |
Roadmap for Developing WDM Audio Drivers |
| Auxiliary display (SideShow) | Windows Portable Devices (WPD) | See WPD documentation in the WDK. |
| Biometric (USB) | UMDF |
Roadmap for Developing Biometric Drivers |
| Bluetooth L2CAP | Depends on device class: KMDF or device-class-specific model such as AVStream |
Bluetooth Profile Drivers Overview
|
| Bluetooth Radio Frequency Communications (RFCOMM) | UMDF |
Bluetooth Profile Drivers Overview |
| Cell phone, PDA, portable media player | Windows Portable Devices (WPD) | See WPD documentation in the WDK. |
| Digital camera | Depends on device characteristics: Media Transfer Protocol (MTP)/UMDF or WIA |
Windows Image Acquisition Drivers |
| Display adapter | Windows Display Driver Model |
Roadmap for Developing Drivers for the Windows Vista Display Driver Model |
| Filter, file system | File system minifilter drivers |
File System Minifilter Drivers |
| Filter, network | Windows Filtering Platform (WFP) callout driver |
Roadmap for Developing WFP Callout Drivers |
| Filter, other | UMDF or KMDF |
Filter Drivers
|
| Human input device (HID) | UMDF (except for mouse and keyboard) or KMDF |
Windows Touch Overview General Requirements on HIDClass Drivers
|
| Keyboard/Mouse filter | KMDF |
Non-HIDClass Keyboard and Mouse Devices |
| Location sensors | Sensor and Location Platform |
Introduction to the Sensor and Location Platform in Windows |
| Modem | Microsoft-supplied |
Overview of Modem INF Files |
| Cable modem | KMDF, WDM, or NDIS-WDM | |
| Network-connected device | UMDF | Web Services for Devices |
| Network adapter, USB | Remote NDIS, NDIS-KMDF |
Remote NDIS (RNDIS) Creating Framework-based Miniport Drivers
|
| Network adapter | Depends on device setup class
|
Using the Network Driver Design Guide |
| Parallel port devices | UMDF or KMDF |
Introduction to Parallel Ports and Devices |
| PC card | Microsoft-supplied or KMDF |
PCMCIA Bus Design Guide |
| PCI devices | Microsoft-supplied or KMDF |
PCI Bus Design Guide |
| Printer | UniDrv, PScript, XPS |
Introduction to Printing |
| Scanner | WIA |
Windows Image Acquisition Drivers |
| Secure digital (SD) | Depends on device setup class: KMDF or WDM |
SD Bus Design Guide |
| Serial port devices | UMDF or KMDF |
Serial Devices and Drivers |
| Smart card reader devices | Microsoft-supplied or KMDF |
Smart Card Reader Devices Design Guide |
| Storage devices on storage buses (SCSI, ATA) | Scsiport, Storport, or ATA port |
Storage Devices Design Guide |
| Touch devices | Microsoft-supplied or KMDF |
Windows Touch Overview |
| USB device | Depends on device setup class: WinUSB, UMDF, KMDF, or WDM |
WinUSB USB Design Guide
|
| Video capture | AVStream |
Roadmap for Developing Streaming Minidrivers
|