Fact-checked by Grok 2 weeks ago

Windows Driver Model

The Windows Driver Model (WDM) is a kernel-mode driver architecture developed by Microsoft for creating device drivers that are source-code compatible across multiple Windows operating systems, introduced with Windows 98 and Windows 2000 to standardize hardware support and reduce development redundancy. It replaced earlier models like the Virtual Device Driver (VxD) used in Windows 95 and provided a unified framework for handling hardware interactions in both consumer (Windows 98/Me) and enterprise (Windows 2000 and later NT-based) environments. WDM's primary purpose is to enable efficient driver development by supporting core features such as for dynamic device detection, installation, and removal, as well as comprehensive to handle device and system power states (from fully operational D0 to powered-off D3). This model ensures drivers can operate reliably in multiprocessor systems, manage interrupts via Interrupt Service Routines (ISRs), and use the for platform-independent hardware access, thereby improving system stability and portability across Windows versions. By abstracting low-level kernel interactions, WDM minimizes the need for OS-specific code, allowing a single driver source to compile for both 32-bit and early 64-bit Windows platforms. At its core, WDM organizes drivers into a layered stack, including bus drivers that enumerate and manage hardware buses (e.g., USB or PCI), function drivers that provide the primary device-specific functionality and act as power policy owners, and filter drivers (upper or lower) that intercept and modify I/O operations without altering the core device logic. Communication within this stack relies on I/O Request Packets (IRPs), which encapsulate requests for operations like data transfer, device configuration, or power transitions, processed asynchronously through dispatch routines and queues. Additional components include synchronization primitives (e.g., mutexes, events), memory management via zones and lookaside lists, and support for Windows Management Instrumentation (WMI) to expose driver data for system monitoring. WDM drivers are installed via INF files that define device identifiers, registry settings, and dependencies, ensuring seamless integration with the Manager and power subsystems. While WDM version 1.10 was fully realized in , earlier implementations in /Me had limitations, such as restricted floating-point usage in kernel mode and differences in IRP handling for surprise removal or power queries. Although WDM remains supported for legacy compatibility in modern Windows versions, Microsoft recommends newer frameworks like the and User-Mode Driver Framework (UMDF) for contemporary development, as they simplify common tasks, reduce , and provide better error handling without direct kernel-mode complexities. WDM is still required for scenarios needing low-level kernel access unavailable in higher-level frameworks, such as custom interfaces or integration with non-WDM stacks.

Introduction

Definition and Purpose

The Windows Driver Model (WDM) is a framework for developing kernel-mode device drivers that manage hardware interactions within the Windows operating system, enabling source-code compatibility across various Microsoft Windows versions. It was designed to supersede disparate legacy models, such as the Virtual Device Driver (VxD) architecture used in consumer-oriented Windows versions like Windows 95 and 98, and the NT Driver Model employed in enterprise-focused systems like Windows NT, thereby providing a cohesive approach to driver design. Kernel-mode drivers adhering to WDM guidelines are specifically termed WDM drivers and operate within the kernel executive to handle core system functions including I/O processing, memory management, and security. The primary objectives of WDM include facilitating (PnP) capabilities, which allow for dynamic detection, configuration, and resource allocation of hardware devices without manual intervention. It also supports features, enabling efficient transitions between power states for individual devices and the overall system to optimize energy consumption and responsiveness. Additionally, WDM standardizes (I/O) operations, ensuring consistent communication protocols for a wide range of peripherals such as USB controllers, PCI buses, and network adapters. By unifying driver development under a single model, WDM significantly reduces the effort required by hardware vendors to maintain across the Windows family, eliminating the need for separate implementations for and editions. This primarily targets -mode operations but establishes foundational elements that influence subsequent extensions, including user-mode driver frameworks for safer, non-kernel interactions in later Windows iterations.

Historical Background

The Windows Driver Model (WDM) originated in the mid-1990s as a initiative to unify the fragmented driver architectures across its operating systems, specifically merging the model used in consumer-oriented and 98 with the more robust kernel-mode model in the enterprise-focused line. This development was driven by the increasing complexity of hardware peripherals and the need for a single, consistent framework to support emerging standards, reducing the burden on developers who previously had to maintain separate codebases for different Windows variants. A pivotal trigger for WDM's evolution was the rise of (PnP) hardware in the mid-1990s, which demanded dynamic device detection and configuration without user intervention, alongside the need for standardized following the release of the Advanced Configuration and (ACPI) specification in December 1996, co-developed by , , and . On April 1, 1996, Microsoft announced the Win32 Driver Model—WDM's foundational precursor—at the Windows Hardware Engineering Conference (WinHEC), positioning it as a core technology for the "Simply Interactive PC" vision that emphasized seamless integration of multimedia, networking, and peripheral support across and NT platforms. Beta releases of WDM components began in 1996, coinciding with early testing for 5.0 (later ), and included integrations such as enhanced support for multimedia drivers, which aligned with WDM's PnP and features. WDM was officially introduced to the public with on June 25, 1998, marking the first implementation in a consumer Windows release, followed by its full integration as the standard driver model in on February 17, 2000, which extended to enterprise editions. This made WDM the first unified model bridging x86 consumer and NT-based enterprise systems, with Second Edition (released June 10, 1999) further enhancing support for USB, modems, and audio via WDM. Initial adoption presented challenges, as existing VxD and NT drivers required recompilation to conform to WDM's kernel-mode and guidelines, leading to hurdles during the transition from models. Nevertheless, WDM provided source and binary for compliant drivers across , Me, 2000, XP, and Server 2003, facilitating broader hardware support and easing long-term development efforts.

Architectural Components

Kernel-Mode Driver Structure

Kernel-mode drivers in the Windows Driver Model (WDM) operate in Ring 0, the highest privilege level of the , granting them direct access to and unrestricted use of system resources. This execution environment shares a single across all kernel components, including other drivers and the operating system , which amplifies the risk of system instability from errors in any single driver. To manage concurrency and resource sharing effectively, drivers leverage Windows kernel executive services, such as dispatcher objects for (e.g., mutexes, semaphores, and events) and the manager for allocation, ensuring coordinated operations in a multiprocessor context. At the core of a WDM kernel-mode driver's structure are key objects that facilitate hardware representation and interaction. The driver object, defined by the DRIVER_OBJECT structure, represents the loaded driver image in memory and stores pointers to dispatch routines for handling I/O requests, along with details like the driver's base address and size. Device objects, created through the IoCreateDevice routine, abstract physical or functional hardware devices and serve as the entry points for I/O operations in the device stack; physical device objects (PDOs) are typically created by bus drivers, while functional device objects (FDOs) are added by function drivers. For user-mode accessibility, symbolic links map kernel device names to user-visible paths using IoCreateSymbolicLink, though WDM-compliant drivers prefer registering device interfaces with IoRegisterDeviceInterface to support enumeration and enable symbolic link creation by the system. Memory management in WDM drivers emphasizes reliability and performance through specialized allocation mechanisms. The non-paged pool, allocated via ExAllocatePool with a non-paged pool type, holds critical data structures that must remain resident in physical memory even at elevated levels (IRQLs) like DISPATCH_LEVEL, preventing paging delays during high-priority operations. Conversely, the paged pool suits non-critical data, permitting the memory manager to page it out under low-memory conditions, but allocations are restricted to lower IRQLs such as PASSIVE_LEVEL to avoid contention. For efficient handling of device I/O buffers—particularly those originating from user-mode applications—drivers employ Memory Descriptor Lists (MDLs) to lock and map physical pages into using routines like MmProbeAndLockPages and MmGetSystemAddressForMdlSafe, enabling without unnecessary copies while ensuring buffer integrity. WDM drivers follow a cooperative threading model that avoids dedicated driver threads, instead utilizing system-provided mechanisms for interrupt and asynchronous processing. Hardware interrupts trigger interrupt service routines (ISRs) executed at high IRQLs, which perform minimal work before queuing Deferred Procedure Calls (DPCs) via KeInsertQueueDpc to defer non-urgent tasks to DISPATCH_LEVEL, balancing responsiveness with system safety. For operations requiring extended execution time or lower IRQLs, drivers queue work items to the system's using IoQueueWorkItem, which processes them at PASSIVE_LEVEL in a delayed work queue, ideal for tasks like device configuration or cleanup without blocking the calling thread. Ensuring stability is paramount in WDM kernel-mode drivers, as lapses can cause invalid accesses leading to blue screen errors (BSOD) and system crashes. Drivers must rigorously adhere to APIs, validating all parameters (e.g., device objects and IRPs), implementing proper to mitigate race conditions in multiprocessor systems, and using safe functions for string operations to prevent overflows. Development practices include leveraging tools like Driver Verifier to detect violations early, and preferring frameworks that abstract low-level details for reduced error surfaces.

Layered Driver Stack

The Windows Driver Model (WDM) organizes kernel-mode drivers into a layered driver stack, which forms a hierarchical structure for handling (I/O) operations across devices. This allows multiple drivers to collaborate on processing requests for a single device, with each layer performing specialized functions while abstracting complexities for higher layers. The stack is typically visualized vertically, starting from higher-level components like the I/O manager and descending to lower-level interfaces. WDM defines three primary types of drivers within this stack: bus drivers, function drivers, and filter drivers. Bus drivers operate at the lowest level, enumerating and managing hardware buses such as or USB, allocating resources like interrupts and memory, and creating device objects for child devices. For instance, a USB bus driver like Usbhub.sys detects and configures USB hubs and peripherals. Function drivers sit above bus drivers and provide device-specific functionality, such as reading and writing data for a device using a driver like Disk.sys. Filter drivers layer above or below function drivers to intercept, modify, or monitor I/O requests without altering the core device logic; common examples include file system filter drivers that perform data or antivirus scanning on disk operations. The forms through device objects created by the manager, where drivers attach in a vertical sequence: higher filters connect to the function driver, which in turn attaches to the . Requests flow downward from the I/O manager through this layering to the , enabling coordinated processing across the . To promote , WDM employs minidrivers paired with Microsoft-supplied class drivers; for example, a printer minidriver works with the Unidrv class driver to handle device-specific rendering while leveraging the class driver's common print queue management, reducing vendor development effort. In networking, the Network Driver Interface Specification (NDIS) provides a specialized layered , where miniport drivers interface with , filter and intermediate drivers add features like packet modification, and drivers handle layers, allowing modular extensions such as firewalls. This layered approach delivers key benefits, including modularity and abstraction: lower drivers shield hardware intricacies from upper ones, facilitating easier development, maintenance, and third-party extensions without disrupting the system. By separating concerns—such as bus enumeration from device operations—WDM enhances scalability for complex peripherals like storage arrays or network adapters.

Key Concepts and Mechanisms

I/O Request Packets (IRPs)

In the Windows Driver Model (WDM), I/O Request Packets (IRPs) serve as the fundamental kernel-mode data structures that encapsulate requests from the operating system or higher-level drivers to device drivers. These packets enable efficient communication by bundling request details, allowing drivers to process operations without direct user-mode involvement. The IRP structure, defined in the WDM header file wdm.h, includes key fields such as Type and Size (reserved for system use), MdlAddress (pointing to a descriptor list for direct I/O buffers), and Flags (indicating attributes like IRP_NOCACHE or IRP_PAGING_IO). The AssociatedIrp provides access to buffers like SystemBuffer for buffered I/O or UserIosb for the I/O status block. Within each stack location—accessed via the Tail.Overlay fields including StackCount and CurrentLocation—the MajorFunction specifies the primary (e.g., IRP_MJ_READ for reading ), while MinorFunction denotes sub-operations. The Parameters holds request-specific details, such as buffer lengths or offsets, and completion status is managed through the IoStatus block, which includes Status (an NTSTATUS code) and Information (byte count). The Tail also supports a CancelRoutine pointer for handling interruptions. IRPs are created by the I/O manager, which allocates the structure and initializes it with the appropriate function codes and parameters before sending it to the top of a driver's device stack via IoCallDriver. Drivers receive IRPs in their dispatch routines, process them by accessing stack locations with IoGetCurrentIrpStackLocation, and may forward them to lower drivers if needed. Upon completion of the request—either synchronously in the dispatch routine or asynchronously—the driver sets the IoStatus fields and calls IoCompleteRequest to return the IRP up the stack, ultimately notifying the original requester. This flow supports layered processing, where IRPs route through the driver stack from to functional to bus drivers. IRPs fall into categories based on their major function codes: standard types handle common file system operations like IRP_MJ_CREATE (for opening handles), IRP_MJ_READ (retrieving data), and IRP_MJ_WRITE (sending data); device-specific IRPs use IRP_MJ_DEVICE_CONTROL for custom I/O controls or IRP_MJ_INTERNAL_DEVICE_CONTROL for internal communications; and power IRPs employ IRP_MJ_POWER with minor codes such as IRP_MN_SET_POWER for managing device power states. Minor codes further refine these, particularly for or power scenarios. For operations that cannot complete immediately, drivers queue IRPs using internal queues or system mechanisms, marking them pending with IoMarkIrpPending to indicate asynchronous processing and returning STATUS_PENDING from the dispatch routine. This ensures the I/O manager tracks the IRP until completion in a separate context. Cancellation is supported for queued or pending IRPs via IoCancelIrp, which sets the IRP's cancel flag and invokes any registered CancelRoutine if the IRP is cancelable (i.e., not yet dispatched to hardware). Drivers set cancellation routines with IoSetCancelRoutine during queuing, allowing safe cleanup of resources if the request is aborted by the user or system. Error handling in IRPs relies on NTSTATUS codes set in IoStatus.Status, such as STATUS_SUCCESS for successful completion or STATUS_PENDING for deferred processing; failures use codes like STATUS_INVALID_PARAMETER or device-specific errors, which propagate up the stack to inform user-mode applications. Drivers must ensure status values align with the operation's outcome before calling IoCompleteRequest.

Driver Entry Points and Lifecycle

The Windows Driver Model (WDM) defines several primary entry points that kernel-mode drivers must implement to interact with the operating system. The routine serves as the initial , invoked by the I/O manager to perform driver-wide initialization, such as allocating global data structures and setting pointers to other entry points in the driver object. It receives a pointer to the driver's DRIVER_OBJECT and returns an NTSTATUS value indicating success (STATUS_SUCCESS) or failure, such as STATUS_NO_MEMORY if initialization allocations fail. In case of failure, the I/O manager unloads the driver without invoking further routines. For () devices, the AddDevice routine is called by the PnP manager after device enumeration to create and configure device objects, including attaching them to the device stack via IoAttachDeviceToDeviceStack and setting device-specific dispatch routines. It also initializes per-device resources and returns STATUS_SUCCESS on completion or an error code if device object creation fails, such as due to insufficient . Dispatch routines, referenced by major function codes like IRP_MJ_READ, IRP_MJ_WRITE, and IRP_MJ_POWER, are set in the DriverEntry routine within the DRIVER_OBJECT's MajorFunction array and handle incoming I/O request packets (IRPs) during normal operation. These routines process specific IRP types, forwarding them down the stack or completing them as needed, and must manage errors like resource unavailability by returning appropriate NTSTATUS codes. The lifecycle of a WDM driver begins with loading, where the (SCM) maps the driver image into kernel memory based on registry settings under HKLM\SYSTEM\CurrentControlSet\Services and invokes DriverEntry to initialize the driver object. Following successful loading, the starting phase occurs for drivers when the PnP manager calls AddDevice upon device detection, followed by dispatching an IRP_MN_START_DEVICE to enable the hardware; here, the driver acquires assigned resources like I/O ports or interrupts from the IRP's IoStackLocation parameters. In the running phase, the driver remains active, with dispatch routines processing IRPs for I/O operations, , and events; drivers may dynamically allocate IRPs using IoAllocateIrp to send requests to lower drivers or devices. The stopping phase is triggered by the PnP manager sending an IRP_MN_STOP_DEVICE or IRP_MN_QUERY_STOP_DEVICE, requiring the driver to release resources temporarily while keeping the device object intact for potential restarts, and handling any pending IRPs by completing or queuing them appropriately. Unloading concludes the lifecycle for non- or dynamically unloadable drivers, where the DriverUnload routine—registered in DriverEntry—is called by the I/O manager to perform cleanup, such as freeing global resources and ensuring no pending IRPs remain by checking queues or using IoCancelIrp if necessary. Failure to handle pending IRPs during unload can lead to system instability, so drivers must validate the IRP count via DriverObject->PendingIrpCount before proceeding. In error scenarios, such as STATUS_NO_MEMORY during resource acquisition in the start phase or dispatch failures, drivers return the error status in the IRP's IoStatus.Status field to propagate issues up the stack without crashing the system.

Compatibility Across Versions

Support in Early Windows

The Windows Driver Model (WDM) received partial implementation in the initial release of Windows 98, where it supported basic kernel-mode driver operations but lacked full power management capabilities, such as ACPI integration for device sleep states and wake events. This limitation stemmed from Windows 98's reliance on the 9x kernel, which prioritized compatibility with legacy Virtual Device Driver (VxD) architecture over advanced power features. Improved WDM support, including better power management, arrived with Windows 98 Second Edition (SE), while full implementation, including comprehensive power management, arrived with Windows 2000, enabling drivers to handle Plug and Play (PnP) detection, I/O request packets (IRPs), and power IRPs more reliably, though differences persisted between 9x and NT-based systems. In Windows 2000, WDM 1.10 introduced enhanced stability for enterprise environments, with routines like PoRegisterSystemState ensuring consistent power state transitions. Windows Millennium Edition (Me), released in 2000, operated on a hybrid 9x that integrated WDM for emerging hardware like USB devices and multimedia controllers, while retaining support for legacy peripherals to maintain . This dual-model approach allowed WDM-based audio and network drivers to leverage streaming for improved performance, but fallback was necessary for older modems and printers, often leading to inconsistent behavior during system or multitasking. Despite these advancements, Windows Me's WDM implementation inherited 98/Me-specific constraints, such as restricted floating-point usage in mode to avoid crashes on non-x86 processors. Binary and source compatibility for WDM drivers was designed to be forward-only, meaning drivers developed for operated unchanged on and due to shared WDM 1.10 interfaces and IRP handling. However, the reverse was not guaranteed, as XP and Server 2003 introduced version-specific extensions—like refined enumeration via improved bus drivers—that could cause backward incompatibilities if drivers relied on them. , in particular, enhanced WDM through better resource allocation, reducing conflicts in multi-device stacks, and provided native USB 2.0 support via the Usbehci.sys miniport driver starting with Service Pack 1. These improvements enabled higher-speed data transfers up to 480 Mbps without third-party extensions, marking a significant step in WDM's evolution for consumer hardware. Early WDM implementations up to faced notable limitations, including the absence of native 64-bit support until the release of 64-Bit Edition in 2005, which extended WDM to x64 architectures while requiring recompilation for long-mode compatibility. Debugging tools during this era, such as the initial versions of integrated into the (WDK) for and XP, were rudimentary, offering basic kernel-mode breakpoints and stack traces but lacking advanced features like time-travel debugging or integrated symbol servers available in later releases. These constraints often necessitated hardware-based debuggers for complex IRP flow analysis, highlighting the challenges of WDM development in pre-Vista environments.

Integration with Later Windows

Following the introduction of the Windows Driver Framework (WDF) in , the Windows Driver Model (WDM) continued to serve as the foundational architecture for legacy kernel-mode drivers, enabling their operation without modification in subsequent versions including through Windows 11. WDM remains a required model for certain kernel-mode drivers in and 11, where it operates alongside WDF to support existing hardware without necessitating full rewrites. This persistence ensures for a wide range of peripherals, though designates WDM as legacy and no longer recommended for new development. In and 11, WDM incorporates enhancements for modern system requirements such as integration with NDIS 6.30 and subsequent releases for network interface drivers, which facilitate advanced features like single-root . These versions also mandate compatibility with firmware and Secure , achievable through EV certificates for driver signing to prevent unauthorized code execution during boot. For instance, storage controllers often rely on WDM-based Storport drivers, which have been updated to align with these security and platform standards. Hybrid driver architectures bridge WDM with newer frameworks, allowing User-Mode Driver Framework (UMDF) 2.x and 3.x drivers to invoke WDM routines for kernel-level operations not natively supported in user mode, thereby minimizing system crashes by isolating potentially unstable code. This approach is particularly useful for USB and other device classes, where UMDF handles high-level interactions while delegating low-level I/O to WDM components. As of 2025, enhancements to WDM emphasize for 32-bit user-mode components via emulation on 64-bit systems, supporting legacy UMDF reflectors that interface with WDM drivers. For emerging hardware like neural processing units () in AI-accelerated devices, WDM provides the underlying interface, often layered with WDF for optimized , as seen in updates to the (WDDM) 3.2 that extend NPU optimizations. Despite these integrations, actively promotes migration from WDM to WDF for improved reliability and reduced development complexity, yet WDM endures for specialized applications such as certain and legacy networking controllers where full framework adoption is impractical.

Management and Development Tools

Device Manager

Device Manager is a graphical user interface tool in Windows, accessible via the devmgmt.msc console, that enables users to discover, configure, and troubleshoot devices and their associated drivers within the Windows Driver Model (WDM) framework. It presents a hierarchical of all detected , organized by categories such as processors, adapters, and universal serial bus controllers, allowing administrators to monitor the status of WDM-compliant devices and their driver stacks. This tool plays a crucial role in managing (PnP) operations by interfacing with the PnP manager to enumerate devices and reflect real-time changes. In terms of functionality, Device Manager supports updating drivers by searching for compatible versions, either locally or through automatic detection, and reverting to previous versions via the feature if an update causes issues. Users can enable or disable specific devices to resolve conflicts or test configurations, and initiate a scan for hardware changes to detect newly connected or removed peripherals, prompting the manager to re-enumerate the device tree. For WDM interactions, Device Manager queries the manager to retrieve details on driver stacks, displaying properties such as allocated —including requests (IRQs), (I/O) ports, and addresses—and flagging resource conflicts with visual indicators like yellow exclamation marks alongside error codes. Key features include driver rollback, which restores the immediately prior driver version stored in the driver store to mitigate faulty updates, and a resource viewer that illustrates bus assignments and hardware mappings for diagnostic purposes. The Events tab provides logs of device-specific failures, such as installation errors or PnP timeouts, drawing from the system's event logs to aid troubleshooting. Administrative privileges are required for actions like driver installations or updates, ensuring controlled access, while integration with Windows Update facilitates the deployment of signed drivers, prioritizing those verified for compatibility and security. Despite its utility, has limitations in WDM management; it cannot directly edit low-level configurations, such as kernel-mode parameters or IRP handling, which must be addressed through custom tools or registry modifications. Additionally, installations rely on information (INF) files within packages to define device IDs, file placements, and registry entries, without allowing manual alterations to these setup details via the interface. briefly visualizes layered stacks, such as bus, function, and filter s, but defers deeper analysis to specialized development tools.

Driver Development and Debugging

The (WDK) serves as the primary for creating Windows Driver Model (WDM) drivers, providing essential headers, libraries, build environments, and sample code that integrate seamlessly with Visual Studio. Released versions of the WDK, such as the one supporting as of 2025, enable developers to target kernel-mode components while ensuring compatibility with the Windows kernel architecture. The kit includes tools for both legacy WDM and modern frameworks like (KMDF), facilitating the development of robust device drivers. Building a WDM driver involves compiling source code into a .sys binary file, typically using MSBuild within Visual Studio or the legacy build.exe tool from the WDK. Developers must include an information (INF) file alongside the .sys to define installation parameters, such as hardware IDs and registry entries, ensuring proper device enumeration during deployment. This process targets Windows 10 and later versions without requiring code conversion for existing WDM drivers, though recompilation is recommended for security updates. Debugging WDM drivers primarily relies on , Microsoft's kernel-mode , which supports live analysis of driver execution on target systems. Connections can be established via serial or USB cables for local setups, or through KDNET over Ethernet for remote, network-based debugging, allowing breakpoints and stack traces during driver entry points like DriverEntry. The !drvobj extension in examines driver objects, revealing details such as device stacks and IRP handlers to identify issues like resource leaks. Testing WDM drivers emphasizes stress and reliability checks using Driver Verifier, a built-in Windows tool that monitors kernel interactions for violations such as memory leaks, pool corruption, or improper IRP handling. Enabled via command-line options like verifier /standard /all, it induces failures to expose latent bugs before production deployment. For certification, the Hardware Lab Kit (HLK) provides an automated test framework that validates drivers against Windows compatibility requirements, including device-specific scenarios on and earlier versions. Best practices for WDM development incorporate static code analysis through Code Analysis for Drivers (formerly PREfast), a compile-time tool that scans C/C++ source for common errors like overruns or dereferences. Runtime verification complements this by using Driver Verifier to detect IRP leaks, where uncompleted I/O requests could lead to system instability. As of 2025, maintains an official repository of WDM-compatible driver samples on , offering Visual Studio-ready projects for common scenarios like USB or storage devices to accelerate prototyping and learning.

Security Aspects

Driver Signing Requirements

The Windows Driver Model (WDM) enforces driver signing to verify the integrity and authenticity of kernel-mode drivers, preventing the loading of potentially malicious or tampered code. This policy was introduced with for 64-bit editions, where kernel-mode drivers required digital signatures to load, using either embedded signatures or catalog files signed with Authenticode technology. In and later versions, enforcement became stricter through boot configuration options, allowing administrators to enable test signing for development but rejecting unsigned drivers in production mode by default. By and , signing became fully mandatory for all kernel-mode drivers on both 32-bit and 64-bit systems, with Secure Boot further restricting loading to only properly signed drivers that chain to trusted roots. The signing process for WDM drivers utilizes Authenticode certificates issued by trusted authorities (CAs), such as those approved by the Root Certificate Program. Developers must obtain an Extended Validation () code certificate, which undergoes rigorous identity verification, to submit drivers via the Windows Hardware Dev Center Dashboard. Tools like Signtool.exe from the Windows SDK are used to embed , typically with SHA-256 hashing for compatibility with modern Windows versions; for example, the command signtool sign /fd sha256 /a /f MyCert.pfx /p MyPassword MyDriver.sys applies the signature to a driver file. After local signing, packages undergo Hardware Lab Kit (HLK) testing and submission for attestation or full , ensuring compliance before distribution. Enforcement occurs at the kernel level, where the Windows loader rejects unsigned or invalidly signed drivers, displaying errors like "A driver cannot load on this device" and preventing system boot if critical boot drivers fail validation. To bypass this for testing, users can enable test mode using the Boot Configuration Data (BCD) editor with the command bcdedit /set testsigning on, which displays a on the but allows self-signed or unsigned drivers to load temporarily. For production drivers seeking the Windows Hardware Quality Labs (WHQL) logo, signatures must be attested through the Dev Center, confirming passage of compatibility tests and integration with . Exceptions to strict signing exist for legacy drivers through compatibility layers, such as allowing cross-signed ( and ) packages on systems upgraded from pre-Windows 10 environments without Secure Boot enabled. However, these are being phased out in , particularly with Secure Boot active, which mandates signatures from the Dev Portal and excludes self-signed or legacy credentials to enhance boot integrity. As of 2025, signing remains required for all new driver submissions to the Hardware Dev Center Dashboard, with certificates subject to revocation checks via (OCSP) to ensure ongoing validity against compromised roots. This update aligns with broader policies to mitigate risks, requiring EV certificates to chain directly to Microsoft-trusted authorities without intermediate lapses.

Vulnerabilities and Mitigation

Common vulnerabilities in Windows Driver Model (WDM) drivers include buffer overflows in I/O Request Packet (IRP) handlers, which arise from inadequate validation of buffer sizes during processing, potentially allowing attackers to overwrite adjacent memory and execute arbitrary code. often occurs through unrestricted kernel access, where drivers expose sensitive operations like memory mapping to unprivileged users, enabling local attackers to gain SYSTEM-level privileges. Time-of-check-to-time-of-use (TOCTOU) races in resource allocation are prevalent in direct I/O scenarios, where user-mode modifications to buffers between validation and use can lead to unauthorized data access or corruption. Historical exploits highlight these risks; in the 2010s, exemplified by Stuxnet, which exploited a zero-day vulnerability in Windows shortcut handling (CVE-2010-2568) to propagate via USB drives and load signed malicious kernel-mode drivers that installed rootkits to hide malicious activity. Recent examples as of November 2025 include CVE-2025-24990, an elevation of privilege vulnerability in the Agere Modem driver, and CVE-2025-60719 in the Windows Ancillary Function Driver for WinSock, underscoring persistent risks in modem and network drivers. Post-2020, Spectre and Meltdown variants impacted driver memory management by exploiting speculative execution to leak kernel data, necessitating mitigations that altered how drivers handle page tables and TLB invalidations, though these introduced performance overheads without directly compromising driver integrity. Mitigation techniques have evolved to address these issues; Kernel Address Space Layout Randomization (KASLR) randomizes the loading of kernel modules, including drivers, since SP1, making it harder for exploits to predict memory addresses, with enhancements in for broader system-wide application. Control Flow Guard (CFG), introduced in , validates indirect calls in driver code at runtime using a of valid targets, preventing control-flow hijacking in kernel-mode components. Hypervisor-protected Code Integrity (HVCI), available since , enforces strict and memory isolation via the , blocking unsigned or tampered driver code from executing in kernel space and requiring drivers to use non-executable pools. Best practices for secure WDM driver development emphasize rigorous input validation in IRP handlers to check buffer lengths and addresses before processing, adherence to least privilege by restricting device object access via Security Descriptor Definition Language (SDDL), and proactive patching through to address discovered flaws. In the 2025 landscape, increased emphasis on security for drivers supporting AI/ML hardware, such as GPUs and NPUs, includes new features like the Virtualization-Based Security (VBS) Enclave SDK to isolate sensitive ML workloads and prevent kernel exploits in environments.

Criticisms

Implementation Complexity

Developing Windows Driver Model (WDM) drivers demands significant volume, with even basic implementations supporting () and often exceeding 10,000 lines of due to the need for manual handling of low-level interactions. For instance, a standard sample driver in the Windows Driver Development Kit (DDK) comprises over 24,000 lines of C , illustrating the verbosity required to address core functionalities without higher-level abstractions. Key challenges arise in managing I/O Request Packets (IRPs) across driver stack layers, where developers must track states meticulously to ensure proper propagation and completion, often involving complex rules for pending operations and error handling that are prone to oversight. Asynchronous callbacks further complicate implementation, as drivers must handle non-deterministic responses from lower-level components while maintaining through manual primitives, since WDM lacks built-in support for common patterns like request queuing. Ensuring reentrancy adds to the intricacy, requiring explicit locking mechanisms to prevent race conditions in multithreaded environments, which demands precise coordination of kernel-mode resources. The for WDM development is steep, necessitating profound understanding of internals, including the I/O subsystem and device object lifecycles, which contrasts sharply with user-mode programming and contributes to elevated bug rates in early iterations. Without comprehensive frameworks, common errors in IRP processing or lead to instability, with static analysis tools revealing hundreds of potential defects across driver codebases analyzed in the . Maintenance poses ongoing issues, as Windows updates frequently introduce compatibility breaks in the Driver Development Interface (DDI), forcing developers to refactor extensive code portions without standardized abstractions for recurring tasks like event handling or resource allocation. Successors like the Windows Driver Framework (WDF) address some of these pain points by providing higher-level abstractions.

Functional Limitations

The Windows Driver Model (WDM) exhibits significant gaps in power management, particularly in its early implementations with Windows 98 and Me, where integration with the Advanced Configuration and Power Interface (ACPI) was incomplete, requiring drivers to manually interpret ACPI events without built-in support for seamless state transitions. This manual approach often involved handling I/O Request Packets (IRPs) for suspend and resume operations directly, which could lead to inefficiencies such as incomplete device powering down and resultant battery drain on portable systems if drivers failed to properly quiesce hardware. For instance, race conditions in IRP-based communication between the power manager and drivers exacerbated these issues, as the model lacked automated state tracking to prevent devices from remaining active during low-power states. Windows 2000 offered fuller ACPI integration with WDM version 1.10. In terms of (PnP) support, WDM's design makes dynamic reconfiguration challenging, especially for scenarios lacking inherent hot-plug awareness, as drivers must manually manage resource rebalancing and device enumeration without higher-level automation. Furthermore, WDM operates exclusively in kernel mode, providing no native support for user-mode drivers, which heightens the risk of system-wide crashes from faulty implementations since errors propagate directly to the core OS. Extensibility in WDM is hindered by the absence of higher-level abstractions, forcing developers to create custom extensions for bus-specific stacks like (NDIS) or Universal Serial Bus (USB), often resulting in duplicated code for common patterns such as interrupt handling or queue management. These limitations prompted the development of the Windows Driver Frameworks (WDF), including (KMDF) and User-Mode Driver Framework (UMDF), starting in 2004, which automate IRP handling, provide built-in and power state machines, and enable safer user-mode execution for non-critical devices, thereby addressing WDM's kernel-only focus. The long-term impact of WDM's shortcomings contributed to a starting with , where frameworks like WDF became the preferred model for new drivers, relegating WDM primarily to legacy support while reducing overall system instability from driver errors.

References

  1. [1]
    Introduction to WDM - Windows drivers | Microsoft Learn
    The Windows Driver Model (WDM) was introduced to enable driver developers to write device drivers that are source-code compatible across all Microsoft ...
  2. [2]
    [PDF] Oney_Programming_the_Micros...
    The Windows Driver Model traces its roots several years back to an OS called Windows for. Workgroups 3.10. At that time we were struggling with support for ...
  3. [3]
    Differences in WDM Versions - Windows drivers | Microsoft Learn
    Dec 14, 2021 · Kernel-mode WDM drivers for Windows 98/Me must follow certain guidelines for using floating-point operations, MMX, 3DNOW!, or Intel's SSE ...
  4. [4]
    Choose a Driver Model - Windows - Microsoft Learn
    May 7, 2025 · Windows driver models include: device function, device filter, software, file system filter, and file system drivers.
  5. [5]
    Types of Windows Drivers - Microsoft Learn
    Feb 21, 2025 · There are two basic types of Microsoft Windows drivers: User-mode drivers execute in user mode, and they typically provide an interface between a Win32 ...
  6. [6]
    [PDF] Programming the Microsoft Windows Driver Model 2nd Edition
    Programming the Microsoft Windows Driver Model / Walter Oney -- 2nd ed. p. cm. Includes index. ISBN 0-7356-1803-8. 1. Microsoft Windows NT device drivers ...
  7. [7]
    Microsoft Announces Win32 Driver Model... - Source
    The Win32 Driver Model is a core technology for Microsoft's Simply Interactive PC (SIPC), unveiled here today ...Missing: history mid- 1990s
  8. [8]
    Preexisting ACPI Specifications - UEFI Forum
    The ACPI open standard for device configuration and power management by the OS was first released in December 1996. It was originally developed by Intel, ...Missing: involvement | Show results with:involvement
  9. [9]
    NDIS Versions Overview for Windows Drivers - Windows drivers
    ### Summary of NDIS 5.0 Introduction and Relation to WDM
  10. [10]
    User Mode and Kernel Mode - Windows drivers - Microsoft Learn
    Oct 28, 2025 · All code that runs in kernel mode shares a single virtual address space. As a result, a kernel-mode driver isn't isolated from other drivers or ...
  11. [11]
    DRIVER_OBJECT (wdm.h) - Windows drivers | Microsoft Learn
    Jul 31, 2025 · Each driver object represents the image of a loaded kernel-mode driver. The I/O manager allocates the DRIVER_OBJECT structure and passes it ...
  12. [12]
    Points to Consider About Device Objects - Windows drivers
    Dec 14, 2021 · A WDM driver creates device objects in its AddDevice routine, which is called by the PnP manager after device enumeration. For most lowest-level ...
  13. [13]
    IoCreateSymbolicLink function (wdm.h) - Windows drivers
    Feb 22, 2024 · The IoCreateSymbolicLink routine sets up a symbolic link between a device object name and a user-visible name for the device.
  14. [14]
  15. [15]
    ExAllocatePool function (wdm.h) - Windows drivers
    ### Summary: Non-Paged and Paged Pools for Kernel-Mode Drivers
  16. [16]
    Using MDLs - Windows drivers - Microsoft Learn
    Feb 21, 2025 · For an MDL that resides in a driver-allocated block of nonpaged memory, use MmBuildMdlForNonPagedPool to initialize this array to describe the ...Missing: WDM pool
  17. [17]
    IoQueueWorkItem function (wdm.h) - Windows drivers
    ### Summary of Work Items for Asynchronous Operations
  18. [18]
    Creating Reliable Kernel-Mode Drivers - Windows drivers
    ### Summary on Stability and Adherence to APIs to Avoid BSOD
  19. [19]
    Driver Stacks - Windows - Microsoft Learn
    Jun 28, 2024 · The overall sequence of drivers that participate in an I/O request is called the driver stack for the request.
  20. [20]
    About File System Filter Drivers - Windows drivers - Microsoft Learn
    May 1, 2025 · Data encryption programs that automatically encrypt and decrypt data being written to or read from disk.
  21. [21]
    Unidrv Minidrivers - Windows drivers - Microsoft Learn
    Jan 30, 2023 · Unidrv minidrivers are text files that contain descriptions of printers. Each minidriver describes one printer type from one manufacturer.
  22. [22]
    Overview of NDIS Driver Types - Windows drivers - Microsoft Learn
    Sep 27, 2024 · This module focuses on the role of device drivers and troubleshooting problems that pertain to them. Last updated on 09/27/2024 ...
  23. [23]
    I/O Request Packets - Windows drivers - Microsoft Learn
    Sep 27, 2024 · Learn about I/O request packets (IRPs) and their role in communication between operating system components and device drivers.
  24. [24]
    Overview of the Windows I/O Model - Microsoft Learn
    Feb 21, 2025 · All I/O requests to drivers are sent as I/O request packets (IRPs). I/O operations are layered. The I/O manager exports I/O system services, ...
  25. [25]
    _IRP (wdm.h) - Windows drivers
    ### Summary of IRP Structure in Windows Drivers (WDM)
  26. [26]
  27. [27]
  28. [28]
  29. [29]
    How to Complete an IRP in a Dispatch Routine - Windows drivers
    Dec 14, 2021 · The dispatch routine sets Status either to STATUS_SUCCESS or to an appropriate error (STATUS_XXX), which can be the value returned by a call ...
  30. [30]
    IRP Major Function Codes - Windows drivers - Microsoft Learn
    Feb 21, 2025 · Each driver-specific I/O stack location (IO_STACK_LOCATION) for every IRP contains a major function code (IRP_MJ_XXX), which tells the driver what operation it ...
  31. [31]
    Plug and Play Minor IRPs - Windows drivers - Microsoft Learn
    Dec 14, 2021 · This section describes the PnP IRPs that are sent to drivers. All PnP IRPs have the major function code IRP_MJ_PNP and a minor function code indicating the ...
  32. [32]
    Different Ways of Handling IRPs - Cheat Sheet - Windows drivers
    Dec 14, 2021 · This article discusses different ways that a driver can send IRPs to a lower driver and includes annotated sample code.
  33. [33]
    IoCancelIrp function (wdm.h) - Windows drivers
    ### Summary of IoCancelIrp Function
  34. [34]
    Points to Consider when Canceling IRPs - Windows drivers
    Dec 14, 2021 · This section discusses guidelines for implementing a Cancel routine and handling cancelable IRPs. For more information about handling cancelable IRPs, see the ...
  35. [35]
    When to Complete an IRP in a Dispatch Routine - Windows drivers
    Dec 14, 2021 · In such cases the driver must not complete the IRP with a status value of STATUS_SUCCESS. Usually, any higher-level driver has already checked ...
  36. [36]
    Writing a DriverEntry Routine - Windows drivers | Microsoft Learn
    Dec 15, 2021 · The DriverEntry routine initializes driver-wide data and resources, and is called when the driver loads. It handles driver initialization, ...
  37. [37]
  38. [38]
    DRIVER_ADD_DEVICE (wdm.h) - Windows drivers
    ### Summary of AddDevice Routine
  39. [39]
    Standard Driver Routine Requirements - Windows drivers
    Dec 15, 2021 · Every driver must have at least one dispatch routine that receives and processes I/O request packets (IRPs). Each driver must place a ...
  40. [40]
    Driver Entry Points in Driver Objects - Windows - Microsoft Learn
    Dec 14, 2021 · When a driver's DriverEntry routine is called, it sets Dispatch, StartIo (if any), and Unload (if any) entry points directly in the driver object.
  41. [41]
    DRIVER_DISPATCH (wdm.h) - Windows drivers | Microsoft Learn
    Feb 24, 2022 · The driver's DriverEntry routine must store the DispatchDeviceControl routine's address in DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL].
  42. [42]
    Specifying Driver Load Order - Windows - Microsoft Learn
    Feb 4, 2022 · This topic describes the relevant values that vendors should specify in the service-install-section referenced by a driver's INF AddService directive.
  43. [43]
    IRP_MN_START_DEVICE - Windows drivers - Microsoft Learn
    Feb 28, 2023 · If a driver requires some time to run its start operations for a device, it can mark the IRP pending and return STATUS_PENDING.
  44. [44]
    Starting a Device - Windows drivers | Microsoft Learn
    Dec 14, 2021 · The PnP manager sends an IRP_MN_START_DEVICE request to drivers either to start a newly enumerated device or to restart an existing device that was stopped for ...Missing: acquire | Show results with:acquire
  45. [45]
    DRIVER_UNLOAD (wdm.h) - Windows drivers
    ### Summary of DriverUnload Routine
  46. [46]
  47. [47]
    IoIsWdmVersionAvailable function (wdm.h) - Windows drivers
    Feb 28, 2023 · The IoIsWdmVersionAvailable routine checks whether a given WDM version is supported by the operating system.
  48. [48]
    USB Host-Side Drivers in Windows - Microsoft Learn
    Jan 17, 2024 · The Usbehci.sys miniport driver supports high-speed USB devices and was introduced in Windows XP with SP1 and later and Windows Server 2003 and ...Usb 3.0 Driver Stack · Usb Host Controller... · Usb 2.0 Driver Stack
  49. [49]
  50. [50]
  51. [51]
    Building a Windows Driver - Microsoft Learn
    May 19, 2022 · Legacy WDM and KMDF drivers should recompile as Windows Drivers targeting Windows 10 with no conversion required. While the drivers may ...
  52. [52]
    Navigating the Network Driver Design Guide - Windows drivers
    Dec 14, 2021 · NDIS 6.30 includes support for single root/I/O virtualization (SR-IOV), Hyper-V extensible switch, Network Direct Kernel Provider Interface ( ...
  53. [53]
    Driver security checklist - Windows - Microsoft Learn
    Feb 26, 2025 · All driver pool allocations must be in non-executable (NX) pool. Using NX memory pools is inherently more secure than using executable non-paged ...
  54. [54]
    Choosing a driver model for developing a USB client driver
    Jan 17, 2024 · This article provides guidelines for choosing the best driver model for developing a USB client driver that acts as the device's function driver.
  55. [55]
    Getting and Providing Data on a 64-bit Computer - Win32 apps
    Jan 7, 2021 · If no 64-bit provider exists, a 32-bit provider can continue to run through the facilities of WOW64. A 64-bit provider can likewise supply data ...
  56. [56]
    What's New in Driver Development for Windows 11, Version 24H2
    Sep 23, 2025 · Starting from WDK version 10.0.26100.1, WDK now supports development, testing and deployment of drivers on ARM64 machines. The WDK/EWDK can be ...
  57. [57]
    DCH Design Principles and Best Practices - Windows drivers
    Jul 14, 2025 · DCH-compliant driver binaries can use Kernel-Mode Driver Framework (KMDF), User-Mode Driver Framework 2 (UMDF), or the Windows Driver Model (WDM) ...
  58. [58]
    Using Device Manager - Windows drivers - Microsoft Learn
    Apr 22, 2025 · Device Manager displays information about each device. This information includes the device type, device status, manufacturer, device-specific properties, and ...
  59. [59]
    PnP Components - Windows drivers - Microsoft Learn
    May 8, 2025 · All drivers should support PnP and power management. If a single driver doesn't support PnP and power management, it constrains the PnP and ...
  60. [60]
    Driver Signing With Digital Signatures - Windows - Microsoft Learn
    Jul 11, 2025 · Driver signing associates a digital signature with a driver package. Windows device installation uses digital signatures to verify the integrity of driver ...
  61. [61]
    Overview of INF Files - Windows drivers - Microsoft Learn
    Apr 22, 2025 · A setup information (INF) file is a text file in a driver package that contains all of the information that device installation components use to install a ...
  62. [62]
    Example WDM Device Stack - Windows drivers - Microsoft Learn
    Oct 13, 2025 · It illustrates WDM device objects and how they layer. The following figure shows the device objects that the sample drivers create. For more ...<|control11|><|separator|>
  63. [63]
    Download the Windows Driver Kit (WDK) - Microsoft Learn
    Sep 23, 2025 · Use the WDK to develop, test, and deploy drivers for Windows. Install and run the latest released WDK on Windows 7 and later.Microsoft Ignite · Device and Driver Installation · Install the WDK using NuGet
  64. [64]
    Windows developer documentation - Windows drivers
    Learn to design, develop, and deploy drivers using the Windows Driver Kit (WDK), debugging tools, and API references. Test with the Hardware Lab Kit (HLK).Windows Driver Frameworks · API reference documentation... · Download the WDK
  65. [65]
    Get started with WinDbg (kernel-mode) - Windows - Microsoft Learn
    Jul 23, 2025 · On the host computer, open WinDbg and establish a kernel-mode debugging session with the target computer. Open the debugger documentation CHM (.Set up a kernel-mode debugging · Establish a kernel-mode...Missing: WDM | Show results with:WDM
  66. [66]
    Install WinDbg - Windows drivers - Microsoft Learn
    Apr 4, 2025 · Previous versions and related downloads. To debug older versions of Windows, use WinDbg (classic) available with Debugging Tools for Windows.Missing: WDM early
  67. [67]
  68. [68]
    Using Driver Verifier - Windows - Microsoft Learn
    Dec 14, 2021 · Driver Verifier can be activated, configured, and monitored through the Verifier utility. This utility contains both a command-line interface and a graphical ...
  69. [69]
    Windows Hardware Lab Kit | Microsoft Learn
    Sep 24, 2025 · Windows HLK only supports testing on Windows 11, Windows 10, and Windows Server versions beginning with Windows Server 2016. For testing ...Missing: WDM Secure
  70. [70]
    Code Analysis for Drivers - Windows - Microsoft Learn
    Jul 2, 2024 · Code Analysis for Drivers is a compile-time static verification tool that detects basic coding errors in C and C++ programs.
  71. [71]
    microsoft/Windows-driver-samples - GitHub
    These are the official Microsoft Windows Driver Kit (WDK) driver code samples for Windows 11. ... Windows Driver Kit documentation. Windows 11 driver ...Sign in · Security · Workflow runs · Activity
  72. [72]
    Driver Signing Policy - Windows - Microsoft Learn
    Aug 19, 2024 · To get your driver signed, first Register for the Windows Hardware Dev Center program. Note that an EV code signing certificate is required to establish a ...
  73. [73]
    Driver code signing requirements - Windows - Microsoft Learn
    May 29, 2025 · This article provides general information on the types of code signing available for your drivers, and the associated requirements for those drivers.Where to get EV code signing... · EV certificate signed drivers
  74. [74]
    Program Requirements - Microsoft Trusted Root Program
    Oct 28, 2024 · OCSP responder requirements: a. Minimum validity of eight (8) hours; Maximum validity of seven (7) days; and b. The next update must be ...
  75. [75]
    POPKORN: Popping Windows Kernel Drivers At Scale
    A lightweight framework that harnesses the power of taint analysis and targeted symbolic execution to automatically find security bugs in Windows kernel ...
  76. [76]
    Possible New Rootkit (Stuxnet trojan) Has Drivers Signed by ... - Dell
    Jul 15, 2010 · The Stuxnet trojan creates two drivers on the compromised machine, called mrxcls.sys and mrxnet.sys. The drivers are used to mask the malware on both the USB ...<|separator|>
  77. [77]
    Meltdown and Spectre: What about drivers? - OSR
    Jan 23, 2018 · The Windows Meltdown and Spectre mitigation patches should not have any adverse effect on drivers, file systems, or file system filters. All ...
  78. [78]
    DEP/ASLR in a kernel driver - NTDEV - OSR Developer Community
    Dec 10, 2012 · The kernel has provided ASLR for kernel mode modules since Vista SP1/WS08. The statements earlier in the thread aren't fully correct for these ...Windows Kernel Writeable and Executable pages - NTDEVASLR and DEP in win7 WDK - NTDEV - OSR Developer CommunityMore results from community.osr.com
  79. [79]
    Control Flow Guard - NTFSD - OSR Developer Community
    Feb 2, 2018 · I'm looking for information on Control Flow Guard (CFG). Specifically, I'm wondering how widely it is supported for kernel mode drivers.Control Flow Guard question... - NTDEVKernel Control flow guard - NTDEVMore results from community.osr.com
  80. [80]
    Memory integrity and virtualization-based security - Microsoft Learn
    Memory integrity is sometimes referred to as hypervisor-protected code integrity (HVCI) or hypervisor enforced code integrity. It was originally released as ...
  81. [81]
    Advancing Windows for AI development: New platform capabilities ...
    May 19, 2025 · New Windows security capabilities like the Virtualization Based Security (VBS) Enclave SDK and post-quantum cryptography (PQC) give ...
  82. [82]
    [PDF] Thorough Static Analysis of Device Drivers - UCL Computer Science
    This device driver is available as a sample in the Windows device driver develop- ment kit (DDK). It consists of 24536 lines of C code. The error was introduced ...
  83. [83]
    [PDF] Model-checking success stories - mimuw
    • a run of SDV on 100 drivers and 80 SLIC rules: • largest driver: 30 k lines of code. • total of all drivers: 450 k lines of code. • total time of 8.000 runs ...
  84. [84]
    Surface Team Driver Development Best Practices - Microsoft Learn
    Feb 17, 2023 · Creating threads instead of using work items for short duration/non-polling tasks. See System Worker Threads. Not ensuring threads have run to ...
  85. [85]
    WDK Forum on MSDN - NTDEV - OSR Developer Community
    Nov 29, 2010 · Just wanted to let you all know that there is now an MSDN Forum for the WDK and Driver development. All the MSDN newsgroups that some of you ...Driver development as career path - NTDEVWindows Drivers Developer Survey - NTDEVMore results from community.osr.com
  86. [86]
    Modern System Power Management - ACM Queue
    Dec 5, 2003 · The Advanced Configuration and Power Interface (ACPI) is the most widely used power and configuration interface for laptops, desktops, and server systems.
  87. [87]
    [PDF] Windows Kernel Internals II Windows Driver Model
    IO operations encapsulated in IRPs. IO requests travel down a driver stack in an IRP. Each driver gets an IRP stack location which contains.Missing: vulnerabilities | Show results with:vulnerabilities
  88. [88]
    [DOC] Plug and Play and Power Management in WDF Drivers
    Dec 11, 2009 · Windows® and the Windows Driver Model (WDM) expose a complicated model for Plug and Play and power management that depends on the driver to ...Missing: limitations hot-