Driver
Driver
This section provides information about the new features and updates to Windows driver development in
Windows 10.
The following is a list of new feature highlights for driver development in Windows 10.
Windows 10, version 1903 WDK supports Visual Studio 2019
Windows Hardware Dev Center dashboard
Open publishing
Debugging Tools for Windows
Device and Driver Installation
Driver Verifier
Windows Driver Frameworks
Universal Windows drivers
Windows Compatible hardware development boards
Power Management Framework
System-Supplied Driver Interfaces
WPP Software Tracing
The following table shows the feature updates in Windows 10, by driver technology and version.
Audio
ACPI
Biometric
Bluetooth
Buses and
Ports
Camera
Cellular
Display
Driver
security
Hardware
notifications
DRIVER 1903 1809 1803 1709 1703 1607 1507
Human
Interface
Device
(HID)
Kernel
Location
Mobile
broadband
Near Field
Communica
tion
Networking
POS
PCI
Pulse Width
Modulation
Sensors
Smart Card
Storage
System-
Supplied
Driver
Interfaces
USB
WI-FI
WLAN
The WDK Driver menu in Visual Studio 2017 is located in the top menu options as seen below.
When you click Contribute, you'll arrive at the Markdown source file for that topic in a GitHub repository. You can
click Edit and suggest changes right here.
For more details, see CONTRIBUTING.md in the repo. And thanks for taking the time to improve the docs!
Debugging Tools for Windows
This section describes the changes in the debugging tools for Windows.
Debugging in Windows 10, version 1903
New stop codes were added to allow better tracking on unique failure types in the Windows operating
system. In addition a number of existing bug check topics were expanded and updated. For more
information, see Bug Check Code Reference.
Updates to KDNET topics to improve ease of use, for example in new Setting Up KDNET Network Kernel
Debugging Automatically
Updates to IP V6 KDNET support.
New JavaScript Debugging topic
Debugging in Windows 10, version 1809
New Debugger Data Model API – A new object oriented debugger data model interface to support
debugger automation is now available using the dbgmodel.h header. The debugger data model is an
extensible object model that is central to the way in which new debugger extensions (including those in
JavaScript, NatVis, and C++) both consume information from the debugger and produce information that
can be accessed from the debugger as well as other extensions. Constructs which are written to the data
model APIs are available in the debugger's dx expression evaluator as well as from JavaScript extensions or
C++ extensions. Documentation will be available at: Overview of the Debugger Data Model C++ Interface
and the dbgmodel.h header reference topics.
IPv6 - We are adding support for IPv6 to KDNET. To make room for the larger headers required for IPv6,
we decreased the payload size of packets. As a result, we’re declaring a new version of the KDNET protocol,
so that host PCs running the latest version of the debugger can be used to debug target PCs that only
support IPv4. There is a version of WinDbg Preview available at https://aka.ms/windbgpreview that
supports IPv6. Follow the Debugging Tools for Windows blog for updates on KDNET IPv6 support and see
Setting Up KDNET Network Kernel Debugging Manually for more details.
Debugging in Windows 10, version 1803
WinDbg Preview Time Travel Debugging (TTD ) hands on lab - This lab introduces Time Travel Debugging (TTD ),
using a small sample program with a code flaw. TTD is used to debug, identify and root cause the issue.
Debugging in Windows 10, version 1709
The following is a list of new content sets for the Debugger in Windows 10, version 1709:
Debugging Using WinDbg Preview - A preview into the next generation debugger.
Time Travel Debugging - Overview - Record and replay an execution of your process.
Debugging in Windows 10, version 1703
The following table shows changes for the Debugger in Windows 10, version 1703:
JavaScript Debugger Scripting dtx (Display Type - Extended Debugger Object Model
Information) command
40 undocumented stop codes in the Bug Check Code Updates to the Configuring tools.ini topic with additional
Reference options in the tools.ini file for the command line debuggers
EVT_UCX_USBDEVICE_GET_CHARACTERISTIC UCX_ENDPOINT_ISOCH_TRANSFER_PATH_DELAYS
EVT_UCX_USBDEVICE_RESUME UCX_CONTROLLER_ENDPOINT_CHARACTERISTIC_PRIORITY
EVT_UCX_USBDEVICE_SUSPEND UCX_ENDPOINT_CHARACTERISTIC
EVT_UCX_ENDPOINT_GET_ISOCH_TRANSFER_PATH_DELAYS UCX_ENDPOINT_CHARACTERISTIC_TYPE
EVT_UCX_ENDPOINT_SET_CHARACTERISTIC UCX_ENDPOINT_ISOCH_TRANSFER_PATH_DELAYS
Deprecated features
The following table describes Windows driver development features that have been removed in Windows 10.
GNSS/Location Geolocation driver sample for Windows Windows 10, version 1709
8.1 and related documentation
Scan/Image WSD (Web Services for Devices) Windows 10, version 1709
Challenger functionality and related
documentation
DRIVER TECHNOLOGY FEATURE DEPRECATED IN
Mobile Operators Mobile broadband app experience apps Windows 10, version 1803
with Sysdev metadata packages are
deprecated in favor of MO UWP APPS
and COSA.
Download the Windows Driver Kit (WDK)
12/11/2019 • 2 minutes to read • Edit Online
The WDK is used to develop, test, and deploy Windows drivers. The latest public version of WDK is available
below.
Join the Windows Insider Program to get WDK Insider Preview builds. For installation instructions for the
Windows Insider Preview builds, see Installing preview versions of the Windows Driver Kit (WDK).
Learn what's new in driver development
Review known issues
Additional information
Release notes and run-time requirements
WDK requires Visual Studio, for more information more info on system requirements for Visual Studio please
review Visual Studio 2019 System Requirements.
EWDK will additionally need .NET 4.7.2, for more information on what .NET runs on please review .NET
Framework system requirements.
You can use the WDK to develop drivers for these operating systems:
CLIENT OS SERVER OS
Related downloads
Download the WDK Insider Preview
Download previous versions of the WDK
Download the Windows Assessment and Deployment Kit (Windows ADK)
Download the Windows HLK, HCK, or Logo Kit
Download the debugging Tools for Windows (WinDbg)
Download Windows Symbol Packages
Installing preview versions of the Windows Driver Kit
(WDK)
8/30/2019 • 2 minutes to read • Edit Online
This page contains installation instructions for Insider Preview (pre-release) versions of the Windows Driver Kit
(WDK). The download links for the latest pre-release version of the WDK and the EWDK are on
https://www.microsoft.com/software-download/windowsinsiderpreviewWDK.
For info about the latest released versions of the WDK, see Download the Windows Driver Kit (WDK). For
downloads of earlier versions of the WDK, see Other WDK downloads.
NOTE
During installation you will see the Visual Studio installer install the WDK Visual Studio Extensions.
CLIENT OS SERVER OS
This topic contains information about earlier versions of the Windows Driver Kit (WDK), Enterprise WDK (EWDK),
and additional downloads for support purposes. To develop drivers, use the latest public versions of the Windows
Driver Kit (WDK) and tools, available for download on Download the Windows Driver Kit (WDK).
The Windows Driver Kit (WDK) is used to develop, test, and deploy Windows drivers. To develop drivers, use the
latest public versions of the Windows Driver Kit (WDK) and tools, available for download on Download the
Windows Driver Kit (WDK).
This topic contains information about earlier versions of the WDK, the Enterprise WDK (EWDK), and additional
downloads for support purposes. To use these earlier versions, you must first install the version of Visual Studio
that is appropriate for your targeted platform.
Windows 10, version 1703 Visual Studio Express 2015 for Desktop
Windows 10, version 1607 Visual Studio Community 2015
Visual Studio Professional 2015
Visual Studio Enterprise 2015
Configure Visual Studio for Windows 10, versions 1709, 1803, and 1809
When you install Visual Studio, select the Desktop development with C++ workload. The Windows 10
Software Development Kit (SDK) is automatically included and is displayed in the right-hand Summary pane.
To develop drivers for ARM/ARM64, choose Individual components and under Compilers, build tools, and
runtimes select Visual C++ compilers and libraries for ARM/ARM64.
Install the Windows SDK to target Windows 10, versions 1607 and 1703
If your development targets systems that run Windows 10, version 1607 or Windows 10, version 1703, you
should install Visual Studio 2015, and then also download and install the version of the Windows SDK for the
targeted version of Windows 10, as identified in the following table.
TARGETED VERSIONS OF WINDOWS VERSION OF WINDOWS SDK
The Windows SDK was not included in Visual Studio 2015, so you must install the SDK separately. Later versions
of Visual Studio include the Windows SDK.
NOTE
Starting with Windows 10, version 1709, installing the WDK will by default install the WDK extensions for Visual Studio.
These extensions are required for integration of the WDK with Visual Studio.
Windows 10, version 1809 WDK for Windows 10, version 1809
Windows 10, version 1803 WDK for Windows 10, version 1803
Windows 10, version 1709 WDK for Windows 10, version 1709
Windows 10, version 1703 WDK for Windows 10, version 1703
Windows 10, version 1607 WDK for Windows 10, version 1607
Windows 10, version 1809 EWDK for Windows 10, version 1809
Windows 10, version 1803 EWDK for Windows 10, version 1803
Windows 10, version 1709 EWDK for Visual Studio with Build Tools 15.6 (Recommended)
EWDK for Visual Studio with Build Tools 15.4
EWDK for Visual Studio with Build Tools 15.2
Windows 10, version 1703 EWDK for Windows 10, version 1703
NOTE
Starting in Windows 10 version 1709, the EWDK is ISO-based. To get started, download and mount the ISO, and then run
LaunchBuildEnv.
IMPORTANT
Newer versions of the Visual C++ 2010 Redistributable can cause issues when you install the SDK for Windows 7. For more
information, see Windows SDK Fails to Install with Return Code 5100 on Microsoft Support.
Get the standalone debugging tools for Windows XP by first downloading the Windows 7 SDK: Microsoft
Windows SDK for Windows 7 and .NET Framework 4.
To install the Debugging Tools for Windows as a standalone component, start the SDK installer, and in the
installation wizard, select Debugging Tools for Windows, and clear all other components.
Related downloads
Download the Windows Assessment and Deployment Kit (Windows ADK)
Download the Windows HLK, HCK, or Logo Kit
Download the debugging Tools for Windows (WinDbg)
Download Windows Symbol Packages
Download the WDK Insider Preview
Bring up guide
6/25/2019 • 2 minutes to read • Edit Online
NOTE
Some topics in this section may apply only to Windows 10 Mobile and certain processor architectures.
This section of the partner documentation is designed for hardware engineers and developers who need to
understand how to get started with bringing up hardware on Windows 10 and Windows Server 2016.
In this section
TOPIC DESCRIPTION
Firmware Windows Engineering Guide (WEG) The Firmware Windows Engineering Guide (WEG) provides
a roadmap to follow through in implementing system
firmware-related best practices.
Boot and UEFI Provides guidance about the boot process and UEFI
implementation requirements for devices that run
Windows 10 and Windows Server 2016.
Windows ACPI design guide for SoC platforms The Advanced Configuration and Power Interface
Specification, Revision 5.0 (ACPI 5.0 specification), defines
a new set of features to support low-power, mobile
devices that are based on System on a Chip (SoC)
integrated circuits and that implement the connected
standby power model. Starting with Windows 8 and
Windows 8.1, and Windows Server 2012 and 2012 R2,
Windows supports the new ACPI 5.0 features for SoC-
based platforms.
Security Use the topics in this section to learn more about security
in Windows 10 Mobile and Windows Server 2016.
Windows 10 Mobile partition layout Learn how to configure storage partitions and partitions
sizes on Windows 10 Mobile devices.
Developing, Testing, and Deploying Drivers
8/26/2019 • 2 minutes to read • Edit Online
The Windows driver development environment and the Windows debuggers are integrated into Microsoft Visual
Studio. In this integrated driver development environment, most of the tools you need for coding, building,
packaging, deploying, and testing a driver are available in the Visual Studio user interface.
To set up the integrated development environment, first install Visual Studio and then install the WDK. You can find
information about how to get Visual Studio and the WDK here. Debugging Tools for Windows is included when
you install the WDK.
The WDK uses MSBuild.exe, which is available both in the Visual Studio user interface and as a command-line tool.
Drivers created in the Visual Studio environment use Project and Solution files to describe a project or group of
projects. The Visual Studio environment provides a tool for converting legacy Sources and Dirs files to Project and
Solution files.
The Visual Studio environment provides templates for:
New drivers
Driver packages
New tests
Enhancement of existing tests
Custom driver deployment scripts
In the Visual Studio environment, you can configure the build process so that it automatically creates and signs a
driver package. Static and run-time analysis tools are available in Visual Studio. You can configure a target
computer for testing your driver and automatically deploy your driver to the target computer each time you
rebuild. You can choose from an extensive set of run-time tests, and you can write your own tests.
The topics in this section show you how to use Visual Studio to perform several of the tasks involved in driver
development, deployment, and testing.
Additional Videos
You'll find videos on the following pages in the Windows driver docs:
What's New in HID
Capture and view USB traces with Microsoft Message Analyzer
Using the Windows Performance Toolkit (WPT) with WDF
Video: Accessing driver IFR logs without a debugger
Video: Debugging your driver with WDF source code
Videos: Debugging UMDF Drivers
The Partner Center for Windows Hardware enables you to create and manage your system and driver submissions quickly and
easily. It replaces the legacy (Sysdev) dashboard for hardware tasks including: hardware certification, collaborative driver
development, and driver distribution through Windows Update. To get started, watch our introductory video series, and see Get
started with the hardware program for registration details.
NOTE
The legacy (Sysdev) dashboard has been retired. Use the Partner Center Hardware dashboard for your hardware tasks.
Hardware Submissions
Create a new driver submission
Manage your hardware submissions
Driver flighting
Device metadata
Driver distribution
Publish a driver to windows update
Share a driver with a partner
Working with extension INF files
Dashboard administration
Register for the hardware program
Add or remove users
Add a code signing certificate
Dashboard information
Getting started with the hardware dashboard
Hardware dashboard FAQ
LSA and UEFI file signing
Device and Driver Installation
12/5/2018 • 2 minutes to read • Edit Online
This section explains how devices and drivers are installed in Windows.
If you are unfamiliar with the device and driver installation process, we recommend that you start by reviewing
Roadmap for Device and Driver Installation. You may also want to read Overview of Device and Driver Installation
for a high-level overview of this process and its components.
Kernel-Mode Driver Architecture Design Guide
10/23/2019 • 2 minutes to read • Edit Online
This section includes general concepts to help you understand kernel-mode programming and describes specific
techniques of kernel programming. This section is divided into four parts:
Introduction to Windows Drivers provides a general overview of Windows components, lists the types of
device drivers used in Windows, discusses the goals of Windows device drivers, and discusses generic
sample device drivers included in the kit.
Kernel-Mode Managers and Libraries lists the primary kernel-mode components of the Windows operating
system.
Writing WDM Drivers provides information needed to write drivers using the Windows Driver Model
(WDM ).
Driver Programming Techniques describes techniques that you can use to program Windows kernel-mode
device drivers.
Note For information about programming interfaces that your driver can implement or call, see Kernel-
Mode Driver Reference.
What's New for WDF Drivers in Windows 10
12/13/2019 • 6 minutes to read • Edit Online
This topic summarizes the new features and improvements for Windows Driver Frameworks (WDF ) drivers in
Windows 10.
Windows 10, version 1903 (March 2019 Update, 19H1) includes Kernel-Mode Driver Framework (KMDF ) version
1.29 and User-Mode Driver Framework (UMDF ) version 2.29.
You can use these framework versions to build drivers for:
Windows 10 (all SKUs)
Windows Server, version 1809
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.
1. Add a DWORD value named ObjectLeakDetectionLimit with the threshold value. This is the
maximum number of objects of the types described in the ObjectsForLeakDetection key.
2. Add a new REG_MULTI_SZ value named ObjectsForLeakDetection that lists each type name to
verify. For example, you could specify WDFDMATRANSACTION WDFDEVICE . To specify all handle types, use
* as the string.
3. To control whether exceeding this threshold should cause a debug break or a bugcheck, set the
DbgBreakOnError key.
By default, if the ObjectsForLeakDetection key is not specified, the framework monitors
WDFREQUEST, WDFWORKITEM, WDFKEY, WDFSTRING, WDFOBJECT, and WDFDEVICE.
The limit scales with the number of devices installed, so if the driver creates three WDFDEVICE
objects, the WDF Verifier limit is three times the value specified in ObjectLeakDetectionLimit.
If you specify WDFREQUEST, the verifier only counts WDFREQUEST objects that the driver creates.
This feature does not currently support tracking the WDFMEMORY object type.
SleepStudy tool provides info on KMDF drivers
The SleepStudy software tool reports the number of power references that a KMDF driver has that are
preventing the system from going to sleep. For more info, see Modern standby SleepStudy.
The rest of this page describes functionality that was added in Windows 10, version 1507.
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.
Driver Security Guidance
12/5/2018 • 2 minutes to read • Edit Online
In this section
TOPIC DESCRIPTION
Driver security checklist This topic provides a driver security checklist for driver
developers.
Threat modeling for drivers Driver writers and architects should make threat modeling
an integral part of the design process for any driver. This
topic provides guidelines for creating threat models for
drivers.
Windows security model for driver developers This topic describes how the Windows security model
applies to drivers and explains what driver writers must do
to improve the security of their devices.
Use the Device Guard Readiness Tool to evaluate HVCI This topic describes how to use the tool to evaluate the
driver compatibility ability of a driver to run in a Hypervisor-protected Code
Integrity (HVCI) environment.
Debugging Tools for Windows (WinDbg, KD, CDB,
NTSD)
12/5/2019 • 3 minutes to read • Edit Online
Start here for an overview of Debugging Tools for Windows. This tool set includes WinDbg and other debuggers.
Debugging environments
If your computer has Visual Studio and the WDK installed, then you have six available debugging environments.
For descriptions of these environments, see Debugging Environments.
All of these debugging environments provide user interfaces for the same underlying debugging engine, which is
implemented in the Windows Symbolic Debugger Engine (Dbgeng.dll). This debugging engine is also called the
Windows debugger, and the six debugging environments are collectively called the Windows debuggers.
NOTE
Visual Studio includes its own debugging environment and debugging engine, which together are called the Visual Studio
debugger. For information on debugging in Visual Studio, see Debugging in Visual Studio. For debugging managed code,
such as C#, using the Visual Studio debugger is often the easiest way to get started.
Windows debuggers
The Windows debuggers can run on x86-based, x64-based, or ARM -based processors, and they can debug code
that is running on those same architectures. Sometimes the debugger and the code being debugged run on the
same computer, but other times the debugger and the code being debugged run on separate computers. In either
case, the computer that is running the debugger is called the host computer, and the computer that is being
debugged is called the target computer. The Windows debuggers support the following versions of Windows for
both the host and target computers.
Windows 10 and Windows Server 2016
Windows 8.1 and Windows Server 2012 R2
Windows 8 and Windows Server 2012
Windows 7 and Windows Server 2008 R2
Additional documentation
For additional information related to Debugging Tools for Windows, see Debugging Resources. For information on
what's new in Windows 10, see Debugging Tools for Windows: New for Windows 10.
UWP device apps
8/14/2019 • 2 minutes to read • Edit Online
Purpose
Device manufacturers can create a UWP device app that serves as a companion to their device. UWP device apps
have more capabilities than regular UWP apps and can perform privileged operations, such as firmware updates.
Also, UWP device apps can start from AutoPlay (on more devices than other apps can), automatically install the
first time a device is connected, and extend the printer and camera experiences built into Windows 8.1 and
Windows 10.
This section describes what UWP device apps are and how device manufacturers can create them. If you're new to
UWP device apps, take a look at Getting started.
If you're looking for info about UWP mobile broadband apps, see Mobile Broadband.
In this section
TOPIC DESCRIPTION
What's new This section provides a glimpse of what's new for UWP
device apps.
Build a UWP device app step-by-step This step-by-step guide describes in detail how to build a
UWP device app with Microsoft Visual Studio and the
Device Metadata Authoring Wizard.
AutoPlay for UWP device apps This topic describes how to use the Device Metadata
Authoring Wizard to enable AutoPlay. It also describes
how to handle AutoPlay activations in your app.
Device sync and update for UWP device apps In Windows 8.1, your UWP app can use a device
background task to synchronize data on your peripheral
device. If your app is associated with device metadata, that
UWP device app can also use a device background agent
to perform device updates, such as firmware updates.
UWP device apps for printers This section introduces UWP device apps for printers.
UWP device apps for cameras This section introduces UWP device apps for cameras.
UWP device apps for internal devices This topic introduces the ways that UWP device apps can
access internal devices.
TOPIC DESCRIPTION
Automatic installation for UWP device apps This topic describes how automatic installation works and
how the app, metadata, and drivers can be updated and
uninstalled.
Hardware Support App (HSA): Steps for Driver Developers This topic provides steps for a driver developer to
associate a driver with a Universal Windows Platform
(UWP) app.
Hardware Support App (HSA): Steps for App Developers This topic provides steps for an app developer to associate
a Universal Windows Platform (UWP) app with a Universal
Windows driver.
Overview of Driver Technologies
10/7/2019 • 2 minutes to read • Edit Online
For general information about developing drivers see Getting started with Windows drivers and Write your first
driver.
The majority of the driver technology information is the same for all editions of Windows 10. When you must
make special considerations for a particular edition of Windows, such as for Windows 10 Mobile, we explicitly
called these out in each technology area.
Driver technologies
3D print devices
ACPI
Audio
Battery Drivers
Biometric Drivers
Bluetooth Drivers
Display drivers
File system drivers
GNSS drivers
GPIO drivers
Hardware notifications
HID Drivers
IEEE Drivers
Imaging device drivers
Kernel-mode driver technology
Mobile broadband
Multifunction device drivers
NetAdapterCx
Network drivers
NFC device drivers
Parallel port drivers
Partner application development
PCI drivers
PCMCIA drivers
Point of Service device drivers
Power management technologies
Print device drivers
SD card bus drivers
Sensor drivers
Serial port drivers
Smartcard device drivers
Simple Peripheral Bus (SPB ) drivers
Storage device drivers
Streaming media device drivers
Test Authoring and Execution Framework (TAEF )
Universal Serial Bus (USB )
Windows Device Testing Framework (WDTF )
Windows Hardware Error Architecture (WHEA)
Windows portable device drivers
Related sections
Getting started with Windows drivers
Driver Development Tools
Partner Center for Windows Hardware
3D printer driver design guide
10/23/2019 • 2 minutes to read • Edit Online
In this section
3D print partner onboarding guide
Microsoft Standard Driver for 3D Printers
MS3DPrint Standard G -Code driver
3D printer custom USB interface support
3D printing sample WSD app
Enable WSPrint 2.0 on a device
Print schema keywords for 3D manufacturing
3D hardware partners
Related sections
Print DDI reference
ACPI design guide
10/23/2019 • 2 minutes to read • Edit Online
This section describes how device drivers can interface with an Advanced Configuration and Power Interface
(ACPI) device. ACPI devices are defined by the Advanced Configuration and Power Interface (ACPI) Specification.
In this section
SECTION DESCRIPTION
Supporting ACPI Devices Provides information about how to use a Windows Driver
Model (WDM) function driver to enhance the functionality of
an ACPI device.
Evaluating ACPI Control Methods Provides information about how device drivers that comply
with the requirements of Kernel-Mode Driver Framework
(KMDF), User-Mode Driver Framework (UMDF), or Windows
Driver Model (WDM) can evaluate ACPI control methods.
How to Identify the Windows Version in ACPI by Using _OSI Provides information about the ACPI Source Language (ASL)
Operating System Interface Level (_OSI) method used to
identify the host operating system.
Related sections
ACPI DDI reference
Audio Devices Design Guide
12/5/2018 • 2 minutes to read • Edit Online
This section describes how to design Microsoft Windows Driver Model (WDM ) audio drivers. These drivers
control audio adapters that render and capture streams containing audio data in wave and MIDI formats.
The following topics are discussed:
Windows 10: What's New for Audio Drivers
Windows Audio Architecture
Roadmap for Developing WDM Audio Drivers
WDM Audio Drivers Overview
WDM Audio Architecture: Basic Concepts
WDM Audio Architecture: Advanced Topics
WDM Audio Support in Different Versions of Windows
Windows Audio Processing Objects
Audio Miniport Drivers
Legacy Audio Interfaces
Battery Devices Design Guide
12/5/2018 • 2 minutes to read • Edit Online
A battery typically has a pair of drivers: the generic battery class driver that Microsoft provides, and a miniclass
driver written specifically for that individual type of battery.
The class driver defines the overall functionality of the batteries in the system and interacts with the power
manager.
This design guide focuses on Writing Battery Miniclass Drivers.
In addition this section includes information on Writing UPS Minidrivers that were used with older versions of
Windows.
Biometric Devices Design Guide
7/24/2019 • 2 minutes to read • Edit Online
This section describes how to write user-mode drivers that work with the Windows Biometric Driver Interface
(WBDI). WBDI is the driver interface of the Windows Biometric Framework (WBF ). WBF ships with Windows 7
and later versions of the Windows operating system.
In this section
Getting Started with Biometric Drivers
Roadmap for Developing Biometric Drivers
Sample Biometric Driver
Supporting Biometric IOCTL Calling Sequence
Using WinUSB in a WBDI Driver
Installing a Biometric Driver
Managing Queues in a WBDI Driver
Creating a Device Interface for a WBDI Driver
Supporting Secure Channels in WBDI Drivers
Using WBDI with Non-PnP Devices or Proprietary Stacks
Hardware Considerations for Biometric Drivers
Ranking a Biometric Driver on Windows Update
Testing Biometric Drivers
Signing WBDI Drivers
Windows Hello: Steps to Submit a Fingerprint Driver
Custom Control Codes
Bluetooth Profile Drivers
12/5/2018 • 2 minutes to read • Edit Online
This section describes Bluetooth profile drivers. The information in this section is divided into the following topics:
Bluetooth Profile Drivers Overview
Bluetooth Low Energy Overview
Using the Bluetooth Driver Stack
Debugging Bluetooth Profile Drivers
Bluetooth FAQ
Transport Bus Driver for Bluetooth Power Control Handling Guidelines
Bluetooth LE Proximity Profile Devices and Apps
Display Devices Design Guide
10/10/2019 • 2 minutes to read • Edit Online
Welcome to the Windows Display Driver Design Guide. This section includes:
Windows Display Driver Model (WDDM ) Design Guide
WDDM is the display/graphics driver architecture available starting with Windows Vista. Drivers that
adhere to WDDM run only on Windows Vista and later.
Windows 2000 Display Driver Model (XDDM ) Design Guide
XDDM is the display/graphics driver architecture available for Windows 2000 through Windows Vista and
Windows 7. XDDM and VGA drivers will not compile on Windows 8 and later versions. If display hardware
is attached to a Windows 8 computer without a driver that is certified to support WDDM 1.2 or later, the
system defaults to running the Microsoft Basic Display Driver.
Display Samples
Driver Development Tools
7/24/2019 • 2 minutes to read • Edit Online
Purpose Resources
The Windows Driver Kit (WDK) provides a set of tools that Getting Started with Universal Windows Drivers
you can use to develop, analyze, build, install, and test
your driver. The WDK includes powerful verification tools Universal Windows drivers allow developers to create a
that are designed to help you detect, analyze, and correct single driver that runs across multiple different device
errors in driver code during the development process. types, from embedded systems to tablets and desktop
Many of these tools can be used very early in the PCs. Hardware developers can use their existing
development process where they are most critical and can components and device drivers across different form
save you the most time and effort. factors.
The Windows Driver Kit (WDK) is fully integrated with You can convert projects and solutions that you created
Microsoft Visual Studio 2015. The WDK uses the same with WDK 8 or Windows Driver Kit (WDK) 8.1 to work
compiler and build tools that you use to build Visual with Windows Driver Kit (WDK) 10 and Visual Studio
Studio projects. The code analysis and verification tools 2015. Before you open the projects or solutions, run the
can now be easily configured and launched from the ProjectUpgradeTool. The ProjectUpgradeTool converts the
Visual Studio development environment, so that you can projects and solutions so that they can be built using
find and fix problems in your driver source early in the WDK for Windows 10.
development cycle. Validating Universal Windows drivers
The WDK provides a sophisticated driver test framework You can use the ApiValidator.exe tool to verify that the
and a set of device fundamental tests that you can use to APIs that your driver calls are valid for a Universal
automatically build, deploy, and test your driver on Windows driver. The tool returns an error if your driver
remote test systems. The WDK provides the tools to make calls an API that is outside the set of valid APIs for
testing and debugging drivers more convenient and Universal Windows drivers. This tool is part of the WDK
effective than before. for Windows 10.
Driver Development Tools Documentation WDK and Visual Studio build environment
This section describes the tools and techniques that can More information and tips for driver developers about
help you during development: using the WDK and the Visual Studio build environment.
Tools for INF Files Developing, Testing, and Deploying Drivers
For specific information about building drivers, and using
Tools for Changing Boot Options for Driver Testing and the verification tools and tests in the Visual Studio
Debugging development environment.
Tools for Testing Drivers
Tools for Verifying Drivers
Tools for Software Tracing
Additional Driver Tools
Getting started with Windows drivers
7/24/2019 • 2 minutes to read • Edit Online
In this section
What is a driver?
Do you need to write a driver?
Choosing a driver model
Write your first driver
Windows compatible hardware development boards
Sharks Cove hardware development board
Provision a computer for driver deployment and testing (WDK 10)
Concepts for all driver developers
Related topics
Windows Driver Kit (WDK)
Driver Security Guidance
GNSS driver design guide
10/23/2019 • 2 minutes to read • Edit Online
This section contains design guidance for building GNSS device drivers.
In this section
GNSS driver design guide for Windows 8.1
GNSS driver design guide for Windows 10
Related sections
GNSS DDI reference
General-Purpose I/O (GPIO) Driver Design Guide
10/23/2019 • 2 minutes to read • Edit Online
This section describes how to write a driver for a general-purpose I/O (GPIO ) controller device. A GPIO controller
configures GPIO pins to perform low -speed data I/O operations, to act as device-selects, and to receive interrupt
requests. Starting with Windows 8, the GPIO framework extension (GpioClx) simplifies the task of writing a driver
for a GPIO controller. Additionally, GpioClx provides a uniform I/O request interface to peripheral device drivers
that communicate with devices that connect to GPIO pins on a controller.
In this section
TOPIC DESCRIPTION
GPIO Driver Support Overview Starting with Windows 8, the GPIO framework extension
(GpioClx) simplifies the task of writing a driver for a GPIO
controller device. Additionally, GpioClx provides driver
support for peripheral devices that connect to GPIO pins.
GpioClx, which is a system-supplied extension to the
kernel-mode driver framework (KMDF), performs
processing tasks that are common to members of the
GPIO device class.
GpioClx I/O and Interrupt Interfaces Typically, the clients of a GPIO controller are drivers for
peripheral devices that connect to GPIO pins. These
drivers use GPIO pins as low-bandwidth data channels,
device-select outputs, and interrupt-request inputs.
Peripheral device drivers open logical connections to GPIO
pins that are configured as data inputs or outputs. They
use these connections to send I/O requests to these pins.
In addition, peripheral device drivers can logically connect
their interrupt service routines to GPIO pins that are
configured as interrupt request inputs.
GPIO-Based Hardware Resources Starting with Windows 8, the general-purpose I/O (GPIO)
pins that are controlled by a GPIO controller driver are
available to other drivers as system-managed hardware
resources. GPIO I/O pins, which are pins that are
configured as data inputs or data outputs, are available as
a new Windows resource type, GPIO I/O resources. In
addition, GPIO interrupt pins, which are pins that are
configured as interrupt request inputs, are available as
ordinary Windows interrupt resources.
Describes support for key buttons (Power, Windows, volume and rotation lock) and other indicators in a
standardized way, together with associated corresponding Windows Engineering Guidance (WEG ).
In this section
TOPIC DESCRIPTION
GPIO buttons and indicators implementation guide Windows 8 introduced support for general-purpose I/O
(GPIO) buttons and indicators by using a HID miniport class
driver. The goal was to provide support for key buttons
(Power, Windows, volume and rotation lock) in a standardized
way, together with associated corresponding Windows
Engineering Guidance (WEG). Windows 8.1 is focused on
enhancing the quality of the end-to-end user experience and
unifying the behavior across various innovative form factors.
GPIO buttons and indicators supplemental testing This topic describes Windows 8.1 test scenarios for hardware
buttons and indicators, to ensure an optimal user experience
for various form factors.
Hardware notifications support Windows 10, version 1709 provides an infrastructure for the
hardware-agnostic support of notification components such
as LEDs and vibration mechanisms. This support is delivered
through the introduction of a Kernel-Mode Driver Framework
(KMDF) class extension specifically for hardware notification
components that allows for the rapid development of client
drivers. A KMDF class extension is essentially a KMDF driver
that provides a defined set of functionality for a given class of
devices, similar to a port driver in the Windows Driver Model
(WDM). This section provides an overview of the architecture
of the hardware notification class extension. For additional
information about the KMDF, see Using WDF to Develop a
Driver.
Related topics
Hardware notifications reference
HID drivers
4/3/2019 • 2 minutes to read • Edit Online
This section introduces Human Interface Devices (or HID ). For more information about HID concepts, see the
official HID specification.
In this section
TOPIC DESCRIPTION
Introduction to HID Concepts This section introduces Human Interface Devices (or HID).
Typically, these are devices that humans use to directly
control the operation of computer systems.
HID Clients Supported in Windows Windows supports the following top-level collections:
HID Clients The HID Clients are drivers, services or applications that
communicate using the HID API and often represent a
specific type of device (for example: a sensor, a keyboard,
or a mouse). They identify the device via a hardware ID or
a specific HID Collection and communicate with the HID
Collection via HID API.
Non-HID legacy devices This section describes drivers, transports, and filter-drivers
for non-HID keyboards and mice. These devices primarily
run on the PS/2 transport.
IEEE 1394 bus driver design guide
7/24/2019 • 2 minutes to read • Edit Online
This section contains information about Windows Image Acquisition (WIA) drivers, Still Image (STI) drivers, and
Web Services on Devices (WSD.)
NOTE
The WIA programming interface is used to develop imaging drivers for modern Windows operating systems. The STI
programming interface was used to develop imaging drivers in legacy Windows operating systems. The STI programming
interface documentation will be archived in a future release.
In this section
Device Interface Classes for Imaging Devices
Windows Image Acquisition Drivers
WIA Properties
64-Bit and WIA
WIA Compatibility Layer
WIA Driver Filters
WIA Item Trees
WIA with Web Services for Devices
Developing a WIA Driver
Developing a WIA Camera Driver
WIA Minidriver Best Practices
WIA Microdriver Commands
Building, Troubleshooting and Debugging WIA Minidrivers
WIA Samples and Tools
Still Image Drivers
Web Services on Devices
Web Services on Devices Reference
Related sections
Imaging DDI reference
File systems driver design guide
11/16/2019 • 2 minutes to read • Edit Online
This section of the WDK provides conceptual information related to file systems and filter drivers (minifilters). For
information about programming interfaces that your driver can implement or call, see the File System
Programming Reference.
The file systems in Windows are implemented as file system drivers working above the storage system. Each of the
file systems in Windows are designed to provide reliable data storage with varying features to meet the user’s
requirements. A comparison of features for each of the standard file systems in Windows is shown in File System
Functionality Comparison. New for Windows Server 2012 is ReFS. ReFS is a file system with scalable large
volume support and the ability detect and correct data corruption on disk.
Creating a new file system driver in addition to those supplied in Windows is likely unnecessary. File Systems and
File System Filter Drivers can provide any customized behavior required to modify the operation of existing file
systems.
This section includes general concepts to help you understand kernel-mode programming and describes specific
techniques of kernel programming. This section is divided into four parts:
Introduction to Windows Drivers provides a general overview of Windows components, lists the types of
device drivers used in Windows, discusses the goals of Windows device drivers, and discusses generic
sample device drivers included in the kit.
Kernel-Mode Managers and Libraries lists the primary kernel-mode components of the Windows operating
system.
Writing WDM Drivers provides information needed to write drivers using the Windows Driver Model
(WDM ).
Driver Programming Techniques describes techniques that you can use to program Windows kernel-mode
device drivers.
Note For information about programming interfaces that your driver can implement or call, see Kernel-
Mode Driver Reference.
Mobile broadband
12/5/2018 • 2 minutes to read • Edit Online
Use the docs in this section to learn more about mobile broadband and how to configure mobile broadband
experiences for your customers.
Overview
Using metadata to configure mobile broadband experiences
Mobile operator scenarios
Multifunction device driver design guide
6/25/2019 • 3 minutes to read • Edit Online
A multifunction device occupies one location on its parent bus but contains more than one function. Combination
printer/scanner/fax devices and modem/network cards are common multifunction devices.
In a multifunction device, the individual functions are independent. This means the functions must have the
following characteristics:
The functions cannot have start-order dependencies.
The resource requirements for one function cannot be expressed in terms of the resources of another
function (for example, function1 uses I/O port x and function2 uses port x + 200).
Each function must be able to operate as a separate device, even if it is serviced by the same drivers as
another function.
Additionally, the following requirements must be met so that a multifunction device can be correctly configured on
an NT-based platform:
Each function on the device must be enumerated.
Resource requirements for each function must be communicated to the PnP manager.
There must be INF files and drivers for each function.
The component responsible for each of these tasks depends on the multifunction standard for the device's parent
bus, the extent to which the device conforms to the standard, and the capabilities of the parent bus driver.
If the device complies with the multifunction standards for its bus, your driver requirements are significantly
reduced. Industry-wide multifunction standards have been defined for the PC Card and PCI buses. For the
applicable hardware standards and guidelines, see the multifunction devices Web site.
If you are designing a multifunction printer, please follow the hardware, firmware and software recommendations
available in the Multifunction Printer Design Recommendations white paper.
If you are working with a multifunction DVD/CD -ROM device used for data storage (not for audio/video playback)
on a Windows XP or later operating system, you should use the system-supplied WDM DVD class driver, which
treats the device as a single logical unit. For Windows 2000 and Windows 98, you should treat the device as two
logical units (so it will appear with two drive letters). If the DVD capabilities are combined with some other type of
function, you should treat the device as a single logical unit and supply a class driver that implements common
command sets for all the features of the device. For more information, see the DVD technology Web site.
For a multifunction device that combines other functionality, you can use a system-supplied driver and INF file if
the device complies with the multifunction standards for its bus. The system supplied multifunction driver (mf.sys)
can handle the bus-level enumeration and resource allocation requirements for the device, and the system-
supplied INF (mf.sys) can install the multifunction device. You need to supply only a function driver and INF file for
each of the individual device functions.
If the device does not comply with the standard for its bus, you might need to supply a driver equivalent to mf.sys
in functionality, in addition to function drivers and INF files for the device functions.
To install a multifunction device, you typically provide a base INF file for the device and an additional INF file for
each of the device's functions. The base INF file typically copies the INF files for the device's individual functions.
For information about how to accomplish this, see Copying INFs.
The following sections describe driver and installation requirements for various types of multifunction devices:
Supporting Multifunction PC Card Devices
Supporting Multifunction PCI Devices
Supporting Multifunction Devices On Other Buses
Using the System-Supplied Multifunction Bus Driver
Creating Resource Maps for a Multifunction Device
See INF File Sections and Directives for information about INF file syntax.
The rest of this section describes how to support multifunction devices on Windows 2000 and later NT-based
platforms only.
The Windows Driver Kit (WDK) includes a separate section that describes how to support multifunction audio
devices.
Network Adapter WDF Class Extension
(NetAdapterCx)
12/13/2019 • 2 minutes to read • Edit Online
Overview
Starting in Windows 10, version 2004, the Windows Driver Kit (WDK) includes a Network Adapter WDF Class
Extension module (NetAdapterCx) that enables you to write a KMDF -based client driver for a Network Interface
Controller (NIC ). NetAdapterCx gives you the power and flexibility of WDF and the networking performance of
NDIS, and makes it easy to write a driver for your NIC.
In previous versions of Windows, WDF and NDIS had individual advantages, but did not interoperate well. The
only way to write a NIC driver was to write an NDIS miniport driver. To use WDF in an NDIS miniport driver, you
had to write extra code in your driver, and even then, you only had access to a small subset of WDF functionality.
With the NetAdapterCx model, conversely, you write a real WDF driver for your NIC. This means that your
NetAdapterCx driver has access to full WDF functionality, as well as networking-specific APIs and I/O support
from the NetAdapter class extension. As shown in the block diagram below, NetAdapterCx still works behind the
scenes with NDIS, but it handles all the interaction with NDIS on your behalf.
Additional info
To watch a video that discusses the benefits of using NetAdapterCx, see the Network Adapter Class Extension:
Overview video on Channel 9.
To learn how to port an NDIS 6.x miniport driver to the NetAdapterCx NIC driver model, see Porting NDIS
miniport drivers to NetAdapterCx.
To start working right away with driver samples on GitHub, clone our NetAdapter-Cx-Driver-Samples repo.
To see the source code for NetAdapterCx itself, or perform step-through debugging, see our Network-Adapter-
Class-Extension repo on GitHub.
If you would like to work with Microsoft as you develop a NetAdapterCx client driver, or have feedback on the class
extension, please send us an email.
To watch a video that discusses the future roadmap and collaboration opportunities, see the Network Adapter
Class Extension: Roadmap and Collaboration video on Channel 9.
Topics
This section contains the following topics:
Porting NDIS miniport drivers to NetAdapterCx
Building a NetAdapterCx client driver
INF files for NetAdapterCx client drivers
Managing the lifetime of objects in NetAdapterCx
Accessing configuration information
Handling control requests
Debugging a NetAdapterCx client driver
Transferring network data
NetAdapterCx receive side scaling (RSS )
Configuring power management
NDIS -WDF function equivalents
NetAdapterCx limitations
Mobile Broadband (MBB ) WDF class extension (MBBCx)
Network Driver Design Guide
12/5/2018 • 2 minutes to read • Edit Online
This Network Driver Design Guide describes how to design and create network device drivers for Windows
operating systems beginning with Windows Vista.
This guide includes the following sections:
Introduction to Network Drivers
NDIS version guide
NDIS Core Functionality
Scalable Networking
Virtualized Networking
Wireless Networking
Network Module Registrar
Winsock Kernel
IP Helper
Windows Filtering Platform Callout Drivers
System Area Networks
Remote NDIS (RNDIS )
Kernel Mode SDK Topics for Network Drivers
Previous Versions of Network Drivers
Near field communications (NFC) design guide
10/23/2019 • 2 minutes to read • Edit Online
Windows exposes a rich set of experiences using NFC technology including the following platforms:
Proximity Platform – Provides a platform to initiate peer-to-peer sharing of content between devices via
NFC, focusing on Windows devices, as well as other NFC -compliant mobile devices as well as reading/write
content to/from NFC forum compliant tags.
Wallet Platform – Provides the secure storage and transactional capabilities to power on-device payment
scenarios, as well as brick-and-mortar payments and other NFC transactions.
To enable NFC support, Microsoft relies on IHVs to provide device drivers that implement the Device Driver
Interface (DDI) defined in these topics.
Use the User-Mode Driver Framework (UMDF ) 2.0 to write NFC drivers for Windows 10 for desktop editions
(Home, Pro, Enterprise, and Education) and Windows 10 Mobile.
Related topics
Getting Started with UMDF
NFC device driver interface (DDI) reference
Parallel Device Driver Design Guide
10/23/2019 • 2 minutes to read • Edit Online
Partners have the ability to create special use applications for things like the Windows 10 settings app. Some
partner-specific app development scenarios require functionality—such as access to system APIs--that is not
available to APIs with General capabilities. Instead these apps require Restricted or special use capabilities,
allowing for functionality available for partner development in a controlled fashion.
In this section
TOPIC DESCRIPTION
Background tasks and custom triggers for device drivers Learn how to use tasks and triggers in conjunction with your
device drivers and apps.
Create a partner settings app Learn how to create an OEM settings apps for custom
hardware components to help differentiate your brand.
Mobile Broadband Learn more about mobile broadband and how to configure
mobile broadband experiences for your customers.
Wi-fi Direct Learn more about Wi-Fi Direct and the Wi-Fi Direct Services
API in Windows.
PCI driver programming guide
7/24/2019 • 2 minutes to read • Edit Online
The following table summarizes the PCIe features that are supported by different versions of Windows. For details,
see the specified sections in the official PCIe specification.
ATS/PRI Windows 10
ATS specification
Errata for the PCI Express® Base Specification Revision
3.1, Single Root I/O Virtualization and Sharing Revision
1.1, Address Translation and Sharing Revision 1.1, and
M.2 Specification Revision 1.0
In this section
PCI Power Management and Device Drivers
Accessing PCI Device Configuration Space
I/O Resource Usage Reduction
Order of Resources in Start-Device IRP
PCI Express FAQ for Graphics
PCI Sample
See Also
Official PCIe specification
PCMCIA Bus Driver Design Guide
7/24/2019 • 2 minutes to read • Edit Online
This section provides driver design guidance for point-of-service (POS ) devices.
In this section
TOPIC DESCRIPTION
POS driver samples Provides samples that demonstrate how to create universal
drivers for point-of-service (POS) devices.
Barcode scanner Bluetooth service UUIDs Describes UUIDs for use with the Bluetooth Service Discovery
Protocol (SDP) for barcode scanners.
Barcode scanner events Describes events that are specific to barcode scanners.
Magnetic stripe reader events Describes events that are specific to magnetic stripe readers
(MSRs).
POS events Describes general POS events that are passed from the device
driver to the POS API layer.
Related sections
POS DDI reference
Power Metering and Budgeting Design Guide
12/5/2018 • 2 minutes to read • Edit Online
This section describes the Power Metering and Budgeting (PMB ) infrastructure and the Power Meter Interface
(PMI).
This section contains the following topics:
Overview of the Power Metering and Budgeting Infrastructure
User-Mode Power Service
Power Meter Interface
Software Defined Batteries
ACPI Power Meter Interface
Printer driver design guide
10/23/2019 • 2 minutes to read • Edit Online
This section provides information on designing, testing, and debugging printer drivers.
In this section
V4 Printer Drivers
Microsoft Printer Drivers
Printer Driver Overview
Microsoft Universal Printer Driver
Microsoft PostScript Printer Driver
Microsoft Plotter Driver
GDI Printer Drivers
Print Ticket and Print Capabilities Technologies
Writing 64-Bit Printer Drivers
Installing and Configuring Printer Drivers
Printer Configuration
Generic Description Language (GDL )
GDL Reference
GDL Examples
Printer Autoconfiguration
Autoconfiguration Details
Autoconfiguration Implementation Options
Bidirectional Communication
Bidirectional Communication Schema Reference
Bidi Interfaces and Enumerations
Asynchronous User Notification Schema
Web Services for Devices Print Service Schema
Printer Driver Isolation
Customizing Microsoft Printer Drivers
COM Interfaces for Printer Web Pages
Print Pipeline Property Bag
Additional Printer Topics
Print Spooler Components
Printer Driver Testing and Debugging
Related sections
Print DDI reference
SD Bus Driver Design Guide
10/23/2019 • 2 minutes to read • Edit Online
SD Bus Sample
This is a sample for a functional Secure Digital (SD ) IO driver. The driver is written using the Kernel Mode Driver
Framework. It is a driver for a generic mars development board that implements the SDIO protocol without
additional functionality.
Download the Storage SDIO driver sample from GitHub.
Sensor device driver design guide
10/23/2019 • 2 minutes to read • Edit Online
In this section
What's new in sensor driver development
Overview of the universal sensor driver model
Windows sensor driver features
Programming guide
Sensor driver model for Windows 8.1
Whitepapers
TITLE DESCRIPTION
HID Sensors Usages This paper provides information about the HID Sensor Class
Driver for Windows 8 and later operating systems.
Integrating Ambient Light Sensors with Computers Running This paper provides information about ambient light sensor
Windows 10 Creators Update (ALS) features in the Windows 10 operating system.
Integrating Motion and Orientation Sensors This paper is intended to help OEMs, ODMs, and IHVs
understand motion and orientation sensor capabilities and
requirements for Windows 10 and earlier operating systems.
Related sections
Sensors DDI reference
Sensors Blogs
Serial Controller Driver Design Guide
12/5/2018 • 2 minutes to read • Edit Online
You can design a driver or application that uses the serial I/O request interface to communicate with a peripheral
device connected to a serial port. A serial port is a hardware communication interface on a serial controller, which
is a 16550 UART or compatible device. To control a serial port to which a peripheral device is permanently
connected, you can design a custom serial controller driver that works with version 2 of the serial framework
extension (SerCx2), which replaces version 1 (SerCx). Or, to control a named serial port located on the case of a
traditional PC, you can use the inbox Serial.sys and Serenum.sys drivers.
In this section
Serial Controller Drivers Overview
Using Version 2 of the Serial Framework Extension (SerCx2)
Using Serial.sys and Serenum.sys
Smart Card Reader Devices Design Guide
7/24/2019 • 2 minutes to read • Edit Online
Design guide for developing drivers for smart card reader devices.
In this section
TOPIC DESCRIPTION
Smart Card Driver Environment Describes the standard environment for the smart card reader
driver.
Management of IOCTL Requests in a Smart Card Reader Explains how reader drivers manage IOCTL requests, how the
Driver callback routine mechanism works, and what a reader driver
must do to initialize its callback routines.
WDM Reader Driver Lists the routines that are required by a WDM reader driver.
Smart Card Minidrivers The smart card minidriver provides a simpler alternative to
developing a legacy cryptographic service provider (CSP) by
encapsulating most of the complex cryptographic operations
from the card minidriver developer.
Smart Card Reader States A table listing the Smart Card reader states and their
meanings.
Installing Smart Card Reader Drivers Provides installation information that is specific to smart card
reader drivers for Windows.
Registering a WDM Smart Card Reader Driver Provides required registry values and their descriptions for
registering a WDM Smard Card Reader driver.
Enabling Smart Card Event Logging in the Registry Registry value name and contents of the registry value for
event logging.
WDM Device Names for Smart Card Readers Instructions for complying with the naming conventions for
device names in Windows operating systems.
Smart Card Driver Debugging Describes the smart card driver libraries support of debugging
features.
Specifications and Resources To work with the smart card support in Microsoft Windows
operating systems, smart card readers and cards should be
compatible with Interoperability Specification for ICCs and
Personal Computer Systems. Smart card readers and device
drivers should also be Plug and Play compliant.
Simple Peripheral Bus (SPB) Driver Design Guide
7/24/2019 • 3 minutes to read • Edit Online
This section describes how to write a driver for a simple peripheral bus (SPB ) controller device or for a peripheral
device that is connected to an SPB. The SPB category includes buses such as I²C and SPI. The hardware vendor for
an SPB controller device provides an SPB controller driver to manage the hardware functions in the controller. This
driver might support a family of similar controller devices. The hardware vendor for an SPB -connected peripheral
device provides an SPB peripheral driver to manage the hardware functions in the peripheral device. This driver
might support a family of peripheral devices across a variety of hardware platforms that provide compatible SPBs.
In versions of Windows before Windows 8, the operating system obtained information from SPB -connected
devices on a PC motherboard only indirectly through the platform firmware. Starting with Windows 8, hardware
vendors can supply Windows drivers to directly control their SPB controllers and their SPB -connected peripheral
devices, and to make these devices available for use by the operating system and by applications. For more
information, see SPB Controller Drivers and SPB Peripheral Device Drivers.
SPBs are frequently used to connect low -speed peripheral devices to motherboard chipsets and System on a Chip
(SoC ) modules. An integrated circuit requires fewer pins to connect to a serial bus than to a parallel bus, which
transmits multiple bits of data per clock cycle. Typically, SPBs are used in cost-sensitive applications in which low
pin counts and simple connections are more important than data transmission speed. Because SPBs run at low
speeds and require few electrical connections, they are frequently used in applications in which battery power must
be conserved.
For example, the PC motherboard in a laptop computer might use an I²C bus to communicate with a low -speed
device that monitors the battery level. Similarly, the SoC module in a smart phone or other mobile device might
use an I²C bus to connect to a sensor device, such as an accelerometer, a GPS device, or a temperature sensor.
An SPB is not a Plug and Play bus. Peripheral devices typically have fixed connections to an SPB and cannot be
removed. Even if a peripheral device can be unplugged from a slot on an SPB, the slot is typically dedicated to this
device. During system startup, the ACPI firmware in the hardware platform enumerates the SPB -connected
peripheral devices for the Plug and Play manager, and specifies the hardware resources that are dedicated to each
device.
Included in these resources is a connection ID that identifies the device's connection to the SPB. The connection ID
encapsulates the information (for example, a bus address and a bus clock frequency) that an SPB controller
requires to establish a connection to the device. Other hardware resources might include an interrupt to which the
driver connects its ISR. However, the hardware resources for the device do not include memory for device
registers. An SPB -connected peripheral device is not memory mapped and can be accessed only through the SPB.
For more information, see Connection IDs for SPB -Connected Peripheral Devices.
An SPB provides no bus-specific means to convey interrupt requests from peripheral devices to the processor.
Instead, an SPB -connected peripheral device signals an interrupt through a separate hardware path that lies
outside of both the SPB and the SPB controller. The interrupt service routine (ISR ) for an SPB -connected
peripheral device must run at IRQL = PASSIVE_LEVEL so that it can synchronously send I/O requests to serially
access the hardware registers of the device over the SPB. For more information, see Interrupts from SPB -
Connected Peripheral Devices.
In this section
TOPIC DESCRIPTION
SPB controller drivers An SPB controller is a device that controls a simple peripheral
bus (SPB) and that transfers data to and from the peripheral
devices that are connected to the SPB. The hardware vendor
for an SPB controller provides an SPB controller driver to
manage the hardware functions in the controller.
SPB peripheral device drivers An SPB peripheral device driver controls a peripheral device
that is connected to a simple peripheral bus (SPB). The
hardware registers of this device are available only through
the SPB. To read from or write to the device, the driver must
send I/O requests to the SPB controller. Only this controller
can initiate data transfers to and from the device over the SPB.
Test with Multi Interface Test Tool (MITT) The Multiple Interface Test Tool (MITT) is a test tool for
validating hardware and software for simple peripheral buses,
such as UART, I2C, SPI, and GPIO. MITT uses the FPGA
development board and includes a software package with
firmware, test binaries, and drivers that provide an inexpensive
test solution.
Storage driver design guide
1/2/2020 • 2 minutes to read • Edit Online
Storage drivers include class, port, miniport, and filter drivers. Typically, a device vendor will implement a miniport
driver for a specific adapter or adapter type. Although not common, a new storage class can be defined and a new
class driver developed for it. Storage classes in Windows include the Disk, CDROM, USB storage, and encrypted
drive classes. Storage driver development is usually limited to writing a miniport driver to work with the StorPort
port driver.
Other types of storage drivers are secure silo drivers and Device Specific Modules (_DSM ) for multipath I/O. For
storage management, WMI providers are developed as a control interface to a driver.
The storage driver design guide includes the following sections:
Roadmap for Developing Windows Storage Drivers
Roadmap for Developing Storport Miniport Drivers
Storage Drivers
Storage Class Drivers
Storage Port Drivers
Storage Miniport Drivers
Storage Virtual Miniport Drivers
Storage Filter Drivers
Crash Dump Filter Drivers
Storage Silo Drivers
CD -ROM Drivers
Tape Drivers
Changer Drivers
Storage Scenarios
Samples
Studying samples is a practical way to see how working storage drivers are developed. Sample storage drivers are
available on GitHub.
Use the guidance in this section to design and implement drivers for devices that stream video and audio (for
example, webcams and digital camcorders).
In this section
Device firmware update for USB devices without using a co-installer
USB Video Class (UVC ) camera implementation guide
Frame Server Custom Media Source
360 camera video capture (new for Windows 10, version 1803)
Camera intrinsics
DShow Bridge implementation guidance for UVC devices
Camera class INF file setting for Universal camera drivers (new for Windows 10, version 1709)
USB Video Class (UVC ) driver implementation checklist (new for Windows 10, version 1703)
Camera Device Orientation
AVStream Minidrivers
Windows 2000 Kernel Streaming Model Design Guide
Kernel Streaming Proxy Plug-ins
Streaming Media Samples
OEM guidance on settings for the Windows 10 in-box camera app
Video stabilization registry settings
Extended camera controls (updated for Windows 10, version 1607)
Camera driver bring up guide (new for Windows 10, version 1607)
Universal camera driver design guide for Windows 10
AVStream Property Sets
Broadcast Driver Architecture Property, Event, and Method Sets
Broadcast Driver Architecture Constants
Encoder Property Sets
Encoder Events
AV/C Protocol Driver Function Codes
AV/C Streaming Protocol Driver Function Codes
AV/C Streaming Constants
Video Capture Minidriver Property Sets
Video Capture Minidriver Event Sets
Device transform manager events
Kernel Streaming Topology Nodes
Kernel Streaming Interface Sets
Kernel Streaming Event Sets
Kernel Streaming Method Sets
Stream Class SRB Reference
DVD Decoder Minidriver Property Sets
DVD Decoder Minidriver Event Sets
COM Interfaces
Related sections
Streaming media DDI reference
Test Authoring and Execution Framework (TAEF)
7/24/2019 • 2 minutes to read • Edit Online
The Test Authoring and Execution Framework (TAEF ) provides a consistent mechanism for developers and testers
to write and run automation. The framework provides a single infrastructure that allows them to share tests across
disciplines and teams.
Universal Serial Bus (USB)
12/13/2019 • 6 minutes to read • Edit Online
Universal Serial Bus (USB ) provides an expandable, hot-pluggable Plug and Play serial interface that ensures a
standard, low -cost connection for peripheral devices such as keyboards, mice, joysticks, printers, scanners, storage
devices, modems, and video conferencing cameras. Migration to USB is recommended for all peripheral devices
that use legacy ports such as PS/2, serial, and parallel ports.
The USB -IF is a Special Interest Groups (SIGs) that maintains the Official USB Specification, test specifications and
tools.
Windows operating systems include native support for USB host controllers, hubs, and devices and systems that
comply with the official USB specification. Windows also provides programming interfaces that you can use to
develop device drivers and applications that communicate with a USB device.
The Microsoft Windows Device Testing Framework (WDTF ) enables you to create, manage, reuse, and extend
device-centric, scenario-based automated tests.
In this section
TOPIC DESCRIPTION
Writing a WDTF SimpleIO plug-in for your device To get the most benefit from the Device Fundamental tests,
your device should have a Simple I/O plug-in that can perform
simple I/O to your device. This can be one of the default
Simple I/O plugs that come with WDTF or one that you wrote.
To see if your device type is supported and to determine if
there are specific requirements for testing, refer to Provided
WDTF Simple I/O plug-ins.
Writing tests with WDTF Whether you start writing driver tests with the templates
provided in the Windows Driver Kit (WDK), or whether you
create the tests on your own, the Microsoft Windows Device
Testing Framework (WDTF) enables you to create and extend
device-centric, scenario-based automated tests.
Triaging WDTF-based tests To help you better understand what is going on in your
WDTF-based tests, you can use the built-in support for WDTF
Object Logging and WPP Software Tracing.
WDTF Architecture and Overview The Microsoft Windows Device Testing Framework (WDTF)
enables you to create, manage, reuse, and extend device-
centric, scenario-based automated tests.
Windows Hardware Error Architecture (WHEA)
design guide
12/13/2019 • 2 minutes to read • Edit Online
This section describes the Windows Hardware Error Architecture (WHEA), which provides support for hardware
error reporting and recovery. In this section, the following information is provided:
An overview of WHEA and its components. For more information, see Windows Hardware Error
Architecture Overview.
How to develop and distribute platform-specific hardware error driver (PSHED ) plug-ins. For more
information, see Platform-Specific Hardware Error Driver Plug-Ins.
How user-mode applications can communicate with the WHEA platform. For more information, see
Windows Hardware Error Architecture-Aware User-Mode Applications.
For more detailed information about WHEA and how to implement WHEA on a hardware platform, see the
WHEA Platform Design Guide. Platform vendors can obtain this design guide by sending email to
[email protected].
In this section
Introduction to the Windows Hardware Error Architecture
New Information for Windows Hardware Error Architecture
Windows Hardware Error Architecture Definitions
Windows Hardware Error Architecture Overview
Platform-Specific Hardware Error Driver Plug-Ins
Windows Hardware Error Architecture-Aware User-Mode Applications
Windows Hardware Error Architecture Debugger Extensions
Related topics
Windows Hardware Error Architecture ACPI Table Specification
Hardware Management and Security
Bug Check 0x124: WHEA_UNCORRECTABLE_ERROR (Windows Debuggers)
Windows Portable Devices
7/24/2019 • 2 minutes to read • Edit Online
In This Section
WPD Design Guide
WPD Programming Guide
WPD Reference
Windows driver samples
12/3/2019 • 2 minutes to read • Edit Online
You can browse and download individual Windows 10 driver samples on the Microsoft Samples portal. You can
also clone, fork, or download the Windows-driver-samples repo on GitHub.
Earlier versions of Windows driver samples are archived at Microsoft Archive on GitHub:
Windows 8.1 driver samples
Windows 8 driver samples
For Windows 7, samples were included in the Windows Driver Kit (WDK).