Fact-checked by Grok 2 weeks ago

Network Driver Interface Specification

The Network Driver Interface Specification (NDIS) is a programming framework and application programming interface (API) developed by Microsoft for Windows operating systems, defining the standardized communication between network interface controllers (NICs), device drivers, and higher-level transport protocols such as TCP/IP. It abstracts the underlying hardware details from the network software stack, enabling multiple protocols to share a single NIC while ensuring portability and interoperability across diverse network adapters. Jointly created by and Corporation in 1989 as part of the initiative, NDIS addressed the fragmentation in early driver development by providing a that separated low-level management from upper-layer logic. This design facilitated easier vendor support for NICs and allowed the operating system to manage bindings between protocols and adapters dynamically, often configured via files like PROTOCOL.INI in early versions. NDIS has evolved through multiple versions to support advancing networking technologies, starting with NDIS 1.0 in 1989 and progressing to NDIS 3.0 for in 1994, which introduced support for unlimited NICs and protocols. Subsequent releases include NDIS 5.0 for and Me (adding features like , power management, and WMI support), NDIS 5.1 for (adding Remote NDIS, tagging, and support), and the major overhaul in NDIS 6.0 for (emphasizing performance improvements such as offloading and simplified driver models). Modern iterations, such as NDIS 6.89 in version 24H2, incorporate enhancements for high-speed networks, , Receive Side Scaling (), and security features like Lightweight Filter (LWF) drivers. At its core, NDIS organizes drivers into a stack comprising miniport drivers (which directly with NIC hardware), protocol drivers (handling transport s), filter drivers (for intermediate processing like packet inspection), and intermediate drivers (for or added functionality). This architecture supports key operations including initialization, data transmission via packet send/receive mechanisms, event handling (e.g., adapter status changes), and (MIB) integration for . ensures older drivers function on newer Windows versions, though NDIS 5.x and earlier are deprecated post-Windows 7.

Overview

Definition and Purpose

The Network Driver Interface Specification (NDIS) is an application programming interface () specification developed by for network interface controllers (NICs) in Windows operating systems. It functions as a library that abstracts network hardware details from network drivers, providing a standardized interface between kernel-mode network drivers and the operating system. This design ensures that drivers can interact with diverse hardware without needing hardware-specific implementations. The primary purpose of NDIS is to allow multiple network protocols, such as TCP/IP and IPX, to share the same without direct hardware access. By enabling protocol drivers to bind to underlying miniport drivers, NDIS facilitates concurrent operation of these protocols, reducing driver complexity and enhancing system modularity. This shared access model promotes efficient resource utilization and simplifies the integration of diverse networking stacks. Key benefits of NDIS include , which insulates upper-level drivers from low-level hardware variations; standardized communication between drivers and the OS , ensuring ; and support for , enabling dynamic device detection and configuration. NDIS operates at the (OSI Layer 2), managing core packet send and receive operations to bridge protocols and physical interfaces.

Historical Development

The Network Driver Interface Specification (NDIS) originated from a collaborative effort between and Corporation, initiated in 1988 to support the networking software. This partnership aimed to create a standardized for network drivers, addressing the fragmentation caused by proprietary implementations in early environments. The initial version, NDIS 1.0, was first released in May 1988 for systems as part of LAN Manager 1.0, enabling protocol stacks to interact with hardware adapters without vendor-specific code. NDIS was designed to overcome limitations of prior interfaces, such as the Packet Driver specification used in DOS-based TCP/IP stacks, which lacked robust support for multiple protocols and binding mechanisms, hindering widespread adoption by hardware vendors. By providing an abstraction layer, NDIS allowed a single adapter driver to serve multiple protocols simultaneously, promoting interoperability in multi-vendor setups. This standardization was crucial for early Windows environments, replacing ad-hoc drivers and facilitating the growth of local area networks. Key milestones followed rapidly, with NDIS 2.0 released in 1990 to introduce protected-mode support under and early Windows versions, enhancing stability and performance in multitasking scenarios. By 1993, NDIS integrated deeply with , evolving to version 3.0 to align with the operating system's portable, 32-bit architecture and kernel-mode driver model. This integration marked NDIS's transition from DOS-centric roots to enterprise-grade networking. The specification continued to advance in tandem with Windows releases, reaching NDIS 3.x by 1995, which became the standard for both and , solidifying its role in the shift to 32-bit systems and broader hardware compatibility. These developments ensured NDIS's longevity as a foundational element of networking, supporting increasing demands for scalability and vendor neutrality.

Architecture

Core Layers and Components

The Network Driver Interface Specification (NDIS) serves as a within the Windows that provides essential services for managing stacks, enabling the of hardware from higher-level software components. This facilitates the registration of and handles (OID) queries and sets, which allow drivers to exchange configuration and status information in a standardized manner. At its core, NDIS employs a to streamline communication between software and hardware: the upper layer consists of and drivers that process data at higher levels; the middle layer is the NDIS itself, acting as an intermediary for service coordination; and the lower layer encompasses miniport drivers that directly with hardware. Key components within this architecture include the NDIS proxy interface provider, which implements NDIS Interface (NDISIF) services on behalf of standard miniport and filter drivers to ensure compatibility and seamless integration. For custom implementations, such as multiplexer (MUX) drivers that aggregate multiple physical interfaces into virtual ones, dedicated interface providers register and manage internal interfaces, extending NDIS functionality beyond basic hardware abstraction. These components interact through well-defined send and receive paths for packet flow: outgoing packets traverse from upper layers down to the miniport for transmission, while incoming packets move upward from hardware to protocols, with NDIS overseeing buffering to manage memory allocation, queuing to order data processing, and synchronization to prevent race conditions in concurrent operations. This layered and component-based design ensures modular extensibility, allowing stacks to adapt to diverse without disrupting upper-layer protocols.

Driver Types

NDIS supports four primary types of network drivers: miniport drivers, protocol drivers, filter drivers, and intermediate drivers, each serving distinct roles within the driver to facilitate communication between network and upper-layer software. These drivers interact through the NDIS library, which provides standardized interfaces and callbacks to abstract specifics and enable modular construction. Miniport drivers operate at the lowest level of the NDIS stack, directly interfacing with network interface card () hardware to manage send and receive operations as well as status reporting. They abstract the NIC's capabilities for higher-level drivers by implementing entry points such as MiniportSendNetBufferLists, which NDIS invokes to transmit packets to the hardware, and handling receive indications via functions like NdisMIndicateReceiveNetBufferLists. Connection-oriented miniport drivers, used for legacy protocols like or ISDN, extend this functionality by managing connection setup, maintenance, and teardown independently, including their own send queues and deserialized operations. Protocol drivers reside at the upper of the NDIS , performing protocol-specific processing for , such as packet formatting, routing, and delivery to applications. They bind to underlying miniport or intermediate drivers via NDIS, using callbacks like ProtocolSendNetBufferLists to forward outgoing packets downward and receiving indications from lower drivers to process incoming traffic. For instance, the driver in Windows exemplifies this by integrating the with NDIS for efficient exchange. Intermediate drivers position themselves between miniport and protocol drivers, providing bridging functionality such as or aggregation while exposing both a virtual miniport downward and a upward. They leverage NDIS for external bindings to other stack components and internal bindings for their own operations, enabling tasks like load balancing across multiple NICs. drivers, a subset of intermediate drivers introduced in NDIS 6.0, attach via NDIS filter modules to inspect, modify, or monitor packets with minimal overhead, such as for security scanning or . All driver types communicate primarily through NDIS-provided callbacks, ensuring standardized data flow and event notification across the stack.

Versions

Pre-NDIS 5.0 Versions

The early versions of NDIS, from 3.0 to 4.1, established the core framework for network driver development in Windows operating systems during the mid-1990s, transitioning from 16-bit to 32-bit architectures while supporting Ethernet networks at speeds up to 100 Mbps. These iterations emphasized compatibility with multiple bindings, enabling a single network adapter to handle various transport protocols simultaneously, but they did not include features that would emerge in later versions. NDIS 3.0, released in 1994 alongside , provided the initial 32-bit implementation of the NDIS library for the kernel, supporting fundamental operations in a protected-mode environment without native capabilities. This version focused on stable, high-performance driver interactions for server and workstation environments, laying the groundwork for modular driver design. NDIS 3.1, introduced in 1995 with , extended the specification by adding support for miniport drivers, which simplified hardware-specific implementations by handling direct interactions through NDIS, and incorporated for dynamic device detection and configuration. It also introduced (virtual device driver) support to bridge 16-bit and 32-bit compatibility, allowing legacy applications and drivers from Windows for Workgroups 3.11 to integrate more seamlessly in the hybrid consumer OS architecture. NDIS 4.0, launched in 1996 with and OSR2, improved packet processing efficiency through functions like MiniportSendPackets for batch sending of multiple packets and scatter/gather support, which enabled across non-contiguous buffers to reduce CPU overhead in data transfers. Additional enhancements included ProtocolReceivePacket for optimized receive paths and MiniportAllocateComplete for better resource management, with protocol drivers implemented as types in the Windows 95 lineage to maintain . NDIS 4.1, released in 1997 with Service Pack 3 and , refined protocol driver performance in Win32 environments by streamlining binding and unbinding operations, reducing latency in multi-protocol setups without introducing major architectural changes. This version continued to prioritize efficiency for 10/100 Mbps Ethernet adapters, supporting robust multi-protocol environments while preserving compatibility with prior NDIS implementations.

NDIS 5.x

NDIS 5.x represents a significant evolution in the Network Driver Interface Specification, introduced during the transition to and subsequent releases, emphasizing improved hardware integration, management capabilities, and performance for consumer and enterprise networking in the early 2000s. This version family built upon prior iterations by incorporating Windows Driver Model (WDM) principles more deeply, enabling better support for dynamic environments while maintaining with earlier NDIS specifications where feasible. Key advancements focused on simplifying driver deployment, enhancing power efficiency, and providing tools for monitoring and optimization, aligning with the growing prevalence of hardware in personal computers. NDIS 5.0, released in 2000, targeted , , and Second Edition, introducing a new INF-based installation format that ensured compatibility across /98/Me lineages for streamlined driver setup. It provided full support, allowing automatic detection and configuration of network adapters without manual intervention, which was crucial for the era's expanding USB and device ecosystem. Power management features were enhanced with support for device states D0 (fully operational) through D3 (powered off), enabling NDIS miniport drivers to handle transitions efficiently and conserve energy in laptops and desktops. Additionally, NDIS 5.0 integrated (WMI) support, permitting administrative tools to query and configure network adapter statistics and settings via standardized interfaces. Link Bandwidth Forecasting (LBFO) was another innovation, allowing drivers to predict and allocate bandwidth dynamically for improved throughput in bandwidth-constrained scenarios, such as early Ethernet and token-ring networks. Scatter/gather capabilities were introduced to facilitate efficient handling of large packet transfers by mapping non-contiguous memory buffers directly to hardware, reducing CPU overhead. Building on NDIS 5.0, the 5.1 update in 2001 was tailored for , adding refinements for 32-bit and emerging 64-bit systems while enhancing security support. It incorporated 64-bit statistical counters to accurately track high-volume network metrics, preventing overflow issues in data-intensive applications. Remote NDIS () enabled USB-based network devices to function as native Ethernet adapters, broadening connectivity options for peripherals like USB Ethernet dongles. VLAN tagging per standard was supported, allowing miniport drivers to handle virtual LAN segmentation for improved network isolation and efficiency in enterprise settings. Security integration with (WPA) was added starting with Windows XP Service Pack 1, facilitating secure wireless connections through NDIS protocol drivers. NDIS 5.1 also extended scatter/gather DMA to serialized and deserialized miniport drivers, optimizing packet processing for intermediate drivers, and introduced new miniport attribute flags for more precise hardware capability descriptions, such as and moderation. These attributes helped NDIS better describe and utilize adapter features during initialization. Overall, NDIS 5.x fostered a unified driver model that smoothed transitions between NDIS miniport drivers and the for upper-layer protocols, promoting consistency in how network stacks interacted with transport services like TCP/IP. This approach reduced fragmentation in driver development, enabling more reliable protocol bindings and event handling across diverse hardware.

NDIS 6.x and Later

NDIS 6.0, introduced in 2006 with , marked a significant evolution in the Network Driver Interface Specification by establishing a unified driver model that simplified development for both 32-bit and 64-bit architectures. This version optimized the send and receive paths through the introduction of NET_BUFFER and NET_BUFFER_LIST structures, which replaced the older NDIS_PACKET structures to enable more efficient data packaging, scatter/gather (), and reduced overhead in network processing. These changes facilitated simplified driver initialization and improved overall performance and scalability for network adapters. Subsequent versions in the NDIS 6.x series built incrementally on this foundation, maintaining through mechanisms that allow drivers to operate across multiple NDIS versions without requiring full rewrites. For instance, NDIS 6.30, released in 2012 with and , enhanced virtualization support by integrating with , enabling parent and child partitions to directly with physical via a virtualized networking . This version also introduced support for Single Root (SR-IOV), which partitions PCIe network adapter resources into virtual functions assignable to child partitions, bypassing the virtual software switch to achieve near-native performance with reduced I/O overhead. Further advancements continued with NDIS 6.70 in 2017, accompanying , which previewed the NetAdapterCx framework as an extension of the Windows Driver Framework (WDF). NetAdapterCx allows (NIC) drivers to leverage WDF's simplified model, streamlining development while harnessing full NDIS functionality for modern hardware. Incremental updates, such as NDIS 6.83 in 2019 for , an incremental update with no major new features, all without introducing breaking changes to ensure seamless compatibility. The series progressed through versions like NDIS 6.84 in 2020 for and NDIS 6.86 for version 21H2, emphasizing ongoing refinements in performance and extensibility. Culminating in NDIS 6.89 with version 24H2 in 2024, this update added support for Receive Segment Coalescing (RSC) offload, a feature that coalesces incoming segments on the to optimize receive-side processing and reduce CPU utilization for high-throughput scenarios. These evolutions underscore NDIS 6.x's role in supporting scalable, virtualization-aware networking through 2025, with consistent emphasis on non-disruptive enhancements.

Key Features

Performance Optimizations

NDIS implements several optimizations in the send and receive paths to enhance throughput and reduce in packet processing. Direct I/O mechanisms allow miniport drivers to access user-mode buffers without intermediate copies, leveraging scatter/gather to map non-contiguous memory regions directly to the network interface card (). This approach minimizes data copying overhead, particularly for high-volume transfers, by using Memory Descriptor Lists (MDLs) to describe buffer layouts, enabling the hardware to perform (DMA) operations on scattered physical pages. In NDIS 6.x, copy avoidance is further improved through the use of MDL chains within NET_BUFFER structures, which permit drivers to chain multiple buffers into a single logical unit, avoiding the need to reallocate or repackage data as it traverses the driver stack. NetBuffer chaining, introduced in NDIS 6.0, represents a key evolution in receive path efficiency by replacing the legacy NDIS_PACKET structure with NET_BUFFER_LIST and NET_BUFFER entities. Each NET_BUFFER can chain multiple MDLs to represent packet data, allowing protocols and filters to indicate or send data without duplicating buffers, which reduces CPU cycles and memory allocations during high-speed operations. This chaining supports scatter/gather operations natively, enabling miniport drivers to process fragmented packets efficiently by generating scatter/gather lists from MDL chains and transmitting them in batches, thereby optimizing resource utilization for networks exceeding 10 Gbps. Hardware offloads shift computational tasks from the CPU to the , significantly lowering overhead for common networking operations. / checksum offload allows the to compute and validate for IPv4/IPv6, , and packets during transmission and reception, as specified in the NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO ; this reduces CPU involvement in per-packet checks, improving overall system throughput. Large Send Offload (LSO), available in versions 1 and 2 since NDIS 6.0, enables the to segment oversized packets into MTU-sized units, handling header replication, sequence numbering, and calculations on the side, which is particularly beneficial for high-bandwidth applications by minimizing host-side segmentation efforts. Receive Side (RSS), also supported via miniport capabilities in NDIS 6.0 and later, distributes incoming packets across multiple CPU cores using a hash-based indirection table derived from packet headers, ensuring while balancing load to prevent bottlenecks on single processors and enhance efficiency. In NDIS 6.89 (as of version 24H2), Receive Segment Coalescing Offload (URO) extends these capabilities by allowing miniport drivers to coalesce multiple incoming segments into larger units before indication to the host, reducing per-packet processing overhead for -based applications like streaming and VoIP. To further mitigate CPU overhead, NDIS incorporates interrupt moderation and packet coalescing. Interrupt moderation, introduced in NDIS 6.0, delays interrupt generation until a configurable number of packets arrive or a timeout elapses, batching notifications to reduce the frequency of context switches and DPC executions, which can significantly lower CPU utilization in high-packet-rate scenarios without significantly increasing . Packet coalescing, extended in NDIS 6.30 through receive filters, aggregates multiple small incoming packets into larger buffers at the before indication to the host, decreasing the volume of interrupts and processing events; this is managed via OID_GEN_RECEIVE_FILTER_PACKET_COALESCING, allowing dynamic configuration based on traffic patterns to optimize for both performance and power in bandwidth-constrained environments. Scatter/gather DMA, first supported in NDIS 4.0, has evolved substantially in NDIS 6.x to accommodate high-speed networks. Early implementations in NDIS 4.0 relied on per-packet of MDLs to scatter/gather lists, limiting for fragmented or multi-packet transfers due to sequential . In NDIS 6.0 and later, enhancements include batched list via NdisMRegisterScatterGatherDma, support for 64-bit addressing to handle large memory spaces, and DMA chaining that allows miniport drivers to queue multiple scatter/gather lists for concurrent execution, reducing overhead and enabling sustained throughput on 10 Gbps+ links by optimizing NIC-to-memory transfers without host intervention.

Management and Monitoring

The Network Driver Interface Specification (NDIS) provides the (OID) system as a primary mechanism for configuring and querying network adapter properties, enabling management and monitoring of network interfaces. OIDs are system-defined identifiers that allow higher-level drivers to request information about miniport driver capabilities and status through functions like NdisOidRequest for connectionless media. For instance, the OID_GEN_MEDIA_CONNECT_STATUS OID queries the connection status of the network interface card () on the network, returning values such as connected or disconnected to indicate link state. NDIS integrates with (WMI) to expose monitoring data, particularly for since NDIS 5.0, where miniport drivers register as WMI providers to supply classes containing adapter statistics. NDIS miniport drivers, including those for , can map OIDs to GUIDs for WMI queries, allowing tools to access operational data without direct driver interaction. NDIS network interfaces support consistent enumeration using globally unique identifiers (GUIDs), which uniquely identify adapters and facilitate management tools like the Get-NetAdapter cmdlet for querying and configuring interfaces. The MSFT_NetAdapter WMI class includes the InterfaceGuid property to provide this identifier, enabling scripted enumeration and monitoring across Windows systems starting from Windows 8. For diagnostics, NDIS employs event logging through functions like NdisWriteEventLogEntry, which protocol and miniport drivers use to record events such as status changes or errors to the Windows event log, viewable via the Event Viewer for . Additionally, NDIS maintains statistics counters accessible via OIDs like OID_GEN_STATISTICS, which track metrics including bytes sent and received—such as ifHCOutOctets for total transmitted bytes and ifHCInOctets for total received bytes—to monitor network activity and performance. These counters, required for NDIS 6.0 and later drivers, provide aggregated data on directed, , and broadcast traffic for diagnostic purposes.

Advanced Capabilities

NDIS provides robust power management capabilities to optimize for network adapters while maintaining functionality for remote . Network adapters support multiple device power states, ranging from D0—the fully operational, highest-power state—to D3, the lowest-power off state, which is further divided into D3hot (software-controllable low power) and D3cold (hardware-dependent deeper sleep). Introduced in NDIS 5.0, (WOL) enables adapters in low-power states (such as D3) to detect specific network patterns, like magic packets, and signal the system to transition back to D0 for remote wake-up without full power restoration. For USB-based adapters, NDIS selective suspend allows idle devices to enter a low-power state after a configurable timeout, reducing CPU overhead by up to 10% for USB 1.1 and 2.0 adapters by suspending the bus interface while preserving wake capabilities. In virtualized environments, NDIS 6.30 and later versions introduce support for Single Root I/O Virtualization (SR-IOV), enabling physical network adapters to create multiple Virtual Functions (VFs) that bypass the host's software stack for direct assignment to virtual machines. This SR-IOV interface integrates seamlessly with , allowing VFs to be allocated to child partitions for near-native networking performance by routing traffic directly through hardware, minimizing latency and improving throughput in multi-tenant scenarios. The protocol facilitates USB-based Ethernet connectivity, commonly used for device where a host computer shares its network via USB without requiring custom miniport drivers. In NDIS 6.x, (QoS) features enable through scheduler queues and prioritization parameters, allowing adapters to classify and throttle packets based on policy-defined bandwidth limits and priorities for applications like VoIP or streaming. NDIS filter drivers play a key role in enabling advanced protocol offloads, such as acceleration, by intercepting and configuring Object Identifiers (OIDs) to offload cryptographic tasks like headers and encapsulation from the CPU to . These drivers support offload version 2 in NDIS 6.1 and later, extending capabilities to and additional algorithms while ensuring compatibility across the driver stack.

Implementation

Driver Development

Developing NDIS-compliant drivers, particularly miniport drivers, requires the use of the (WDK), which provides the necessary headers, libraries, and build environments for creating kernel-mode drivers in C or C++. The development process begins with implementing a DriverEntry routine that registers the driver with NDIS by calling NdisMRegisterMiniportDriver, passing an NDIS_MINIPORT_DRIVER_CHARACTERISTICS structure containing the driver's entry points and supported NDIS version (e.g., 6.x or later). This registration step initializes the miniport's interaction with the NDIS library, enabling subsequent adapter-specific setup via the MiniportInitializeEx function. Key APIs for core operations include those for data transmission and Plug and Play (PnP) event handling. For transmitting network data, protocol drivers invoke NdisSendNetBufferLists to pass NET_BUFFER_LIST structures to the underlying miniport, which must implement the MiniportSendNetBufferLists handler to process outgoing packets and indicate completion using NdisMSendNetBufferListsComplete. Miniports handle PnP events, such as device arrival or removal, by processing I/O Request Packets (IRPs) through the MiniportPnpIrp function or by specifying PnP characteristics in the registration structure. Since NDIS 6.x, miniport drivers can leverage the (KMDF) to simplify implementation of common functionalities like and I/O handling, reducing while maintaining NDIS compatibility. Introduced in NDIS 6.70 (), the NetAdapter Class Extension (NetAdapterCx) further streamlines miniport development by providing a WDF-based model that abstracts low-level NDIS details, allowing developers to focus on hardware-specific logic in client drivers. Installation of NDIS drivers relies on INF files, which define hardware IDs, registry settings, and installation procedures to ensure proper integration with the Windows manager. For debugging, developers use with the NDIS kernel debugger extension (ndiskd.dll) to inspect network adapters, trace packet flows, and analyze driver states via commands like !ndiskd.netadapter. Additionally, NDIS-specific testing tools such as NDISTest from the Windows Hardware Lab Kit (HLK) validate compliance, simulate network scenarios, and detect issues like resource leaks or incorrect packet handling.

Compatibility Considerations

NDIS ensures compatibility across different Windows s and through a version negotiation mechanism during driver initialization. When an NDIS driver loads, it declares its supported NDIS by specifying the numbers in structures such as NDIS_MINIPORT_DRIVER_CHARACTERISTICS for miniport drivers. The operating system then determines the highest compatible between the driver and the NDIS library, falling back to a lower if necessary to maintain functionality. For instance, an NDIS 5.1 driver can operate on newer systems like , which natively supports NDIS 6.50, by running in a that emulates NDIS 5.1 behavior. This fallback limits the driver to features available in the older specification, such as reduced support for advanced offloads or , but allows basic network operations to proceed without requiring driver recompilation. NDIS 6.0 and later versions include built-in layers that map older to newer equivalents, enabling seamless integration of drivers on modern platforms. NDIS 6.0 and subsequent versions support both 32-bit and 64-bit architectures, requiring separate binary builds for each but sharing the same and definitions to simplify cross-platform development. Legacy support for pre-NDIS 5.0 drivers is handled through compatibility shims in earlier Windows versions, though modern systems like and later do not support NDIS versions below 5.1, necessitating updates for full compatibility. Developers must compile distinct binaries for x86 and x64 targets using the (WDK), ensuring alignment with the target OS architecture. Key challenges in NDIS compatibility arise from deprecations in newer versions, such as the phasing out of certain NDIS 5.x features and the shift away from connection-oriented NDIS (CoNDIS) models in favor of connectionless protocols for most modern networking scenarios. Post-NDIS 6.0, CoNDIS remains supported for legacy hardware like or ISDN but is not recommended for new development, requiring migration to the simplified NDIS 6.x model, which builds on the Windows Driver Model (WDM) with enhanced and . This migration involves updating driver entry points, OID handling, and status indications to align with NDIS 6.x structures, often addressing differences in buffer management and interrupt handling. To facilitate multi-version support, NDIS drivers can employ co-installers—user-mode DLLs specified in the —that detect the OS version and install appropriate components or registry settings dynamically. This approach allows a single driver package to handle multiple NDIS versions without separate distributions, such as installing NDIS 6.x features on supported OSes while falling back for older ones. Compatibility is further validated through testing with the Windows Hardware Lab Kit (HLK), which includes NDIS-specific tests for , performance, and across Windows versions and configurations. HLK certification ensures drivers meet Microsoft's compatibility standards, identifying issues like version mismatches or deprecated usage early in .

References

  1. [1]
    Overview of NDIS Driver Types - Windows drivers - Microsoft Learn
    Sep 27, 2024 · The Network Driver Interface Specification (NDIS) library abstracts the network hardware from network drivers. NDIS also specifies a ...
  2. [2]
    What is Network Driver Interface Specification (NDIS)? - TechTarget
    Mar 10, 2023 · NDIS is a Windows specification for how communication protocol programs (such as TCP/IP) and network device drivers communicate with each other.
  3. [3]
    NDIS: Unveiling the Network Driver Interface Specification
    Feb 9, 2024 · It was developed by Microsoft and 3Com in the 1980s to standardize the interface between network card drivers and the operating system in ...
  4. [4]
    NDIS Drivers - Windows Internals, Fifth Edition [Book] - O'Reilly
    In 1989, Microsoft and 3Com jointly developed the Network Driver Interface Specification (NDIS), which lets protocol drivers communicate with network adapter ...
  5. [5]
  6. [6]
    Introduction to NDIS 6.89 - Windows drivers - Microsoft Learn
    Jan 31, 2025 · This section introduces NDIS 6.89 and describes changes from NDIS 6.88. NDIS 6.89 is included in Windows 11, version 24H2.Missing: history | Show results with:history
  7. [7]
    Introduction to NDIS Network Interfaces - Windows drivers
    Jan 6, 2025 · To support the management information base (MIB), the Network Driver Interface Specification (NDIS) manages a collection of network interface ...
  8. [8]
    Introduction to NDIS 6.0 - Windows drivers - Microsoft Learn
    Mar 13, 2023 · NDIS specifies a standard interface between kernel-mode network drivers and the operating system.
  9. [9]
    Introduction to NDIS Protocol Drivers - Windows - Microsoft Learn
    Mar 13, 2023 · An NDIS protocol driver exports functions to communicate with NDIS for network data, using NDIS-provided functions to send and receive data.
  10. [10]
    1990 Networking: LAN Manager 2.0 | OS/2 Museum
    Jul 16, 2025 · Microsoft collaborated with 3Com and the two companies jointly published the NDIS specification for network drivers. However, the relationship ...
  11. [11]
    [PDF] Microsoft/3Corn LAN Manager Network Driver Interface Specification
    This document defines: 1. Protocol Manager functions and interfaces for configuration and binding of MAC and protocol drivers. 2. The software interface between ...
  12. [12]
    Networking FreeDOS - History of DOS networking
    Microsoft's networking software came with an own network driver model called "Network Driver Interface Specification" (NDIS) that the company had developed with ...
  13. [13]
    3Com/Microsoft LAN Manager Network Driver Interface Specification ...
    Nov 2, 2020 · All primitives specified in this section can be called in protected mode in either interrupt or task context under OS/2. Since any primitive ...
  14. [14]
    [PDF] Custer_Inside_Windows_NT_19...
    The NDIS interface has been available in LAN Manager but is updated in Windows NT to NDIS version 3.0.6 Version 3.0 is portable (written in C), is updated ...
  15. [15]
    NDIS Network Interface Architecture - Windows drivers
    Mar 13, 2023 · NDIS provides a set of services to support network interfaces and interface stacks. In the WDK, this set of services is referred to as NDIS network interface ( ...Missing: core layers
  16. [16]
    Miniport drivers - Windows - Microsoft Learn
    Sep 27, 2024 · An NDIS miniport driver has two basic functions: A miniport driver communicates with its NICs and with higher-level drivers through the NDIS library.<|control11|><|separator|>
  17. [17]
    Connection-Oriented NDIS Miniport Drivers - Windows drivers ...
    A connection-oriented miniport driver controls one or more miniport adapters for connection-oriented media. Connection-oriented miniport drivers must be ...
  18. [18]
    NDIS Protocol Drivers - Windows - Microsoft Learn
    Jan 6, 2025 · The protocol driver calls Ndis*Xxx functions to send packets, read and set information that's maintained by lower-level drivers, and use ...
  19. [19]
    NDIS Intermediate Drivers Overview - Microsoft Learn
    Mar 13, 2023 · NDIS driver stacks must include miniport drivers and protocol drivers and can also include intermediate drivers.
  20. [20]
    NDIS Filter Drivers - Windows - Microsoft Learn
    Jan 6, 2025 · NDIS 6.0 introduced NDIS filter drivers. Filter drivers can monitor and modify the interaction between protocol drivers and miniport drivers ...
  21. [21]
    NET_PNP_EVENT (NDIS 5.1) structure (Windows Drivers)
    Jun 18, 2017 · The NetEvent code in the structure identifies the type of Plug and Play or power management event. The Buffer contains information specific to the type of ...
  22. [22]
    NET_BUFFER Structure - Windows drivers - Microsoft Learn
    Dec 15, 2021 · NDIS 6.0 and later NET_BUFFER structures are analogous to the NDIS_PACKET structures used by NDIS 5.x and earlier drivers.Missing: key NetBufferList unified model
  23. [23]
    Virtualized networking enhancements in NDIS 6.30 - Windows drivers
    Mar 13, 2023 · NDIS supports virtualized networking interface that allow Hyper-V parent and child partitions to interface the underlying physical networking interface.
  24. [24]
    Introduction to Single Root I/O Virtualization (SR-IOV) - Microsoft Learn
    Jan 31, 2025 · Starting with NDIS 6.30, the single root I/O virtualization (SR-IOV) interface supports Microsoft Hyper-V performance improvements for ...
  25. [25]
    Introduction to NDIS 6.70 - Windows drivers | Microsoft Learn
    Mar 13, 2023 · The NetAdapterCx model enables NIC driver developers to harness the full functionality and simplified driver model of WDF, meaning NIC drivers ...
  26. [26]
    Introduction to NDIS 6.83 - Windows drivers - Microsoft Learn
    Mar 13, 2023 · This section introduces NDIS 6.83 and describes changes from NDIS 6.82. NDIS 6.83 is included in Windows 10, version 1903.Missing: history timeline<|control11|><|separator|>
  27. [27]
    Overview of NDIS QoS Parameters - Windows drivers - Microsoft Learn
    Mar 13, 2023 · NDIS QoS parameters specify policies for packet delivery, including priority, flow control, traffic selection, and classifications for traffic ...
  28. [28]
    NDIS Scatter/Gather DMA - Windows drivers - Microsoft Learn
    Mar 13, 2023 · NDIS is limited to sending one packet at a time to avoid a deadlock due to resource issues. This is not as efficient as sending multiple packets ...
  29. [29]
    NET_BUFFER Data Packaging - Windows drivers | Microsoft Learn
    Dec 14, 2021 · To accommodate older drivers that use NDIS_PACKET structures, NDIS 6.0 translates NDIS_PACKET structures to NET_BUFFER structures and vice versa ...Missing: key unified model
  30. [30]
    Offloading Checksum Tasks - Windows drivers - Microsoft Learn
    Dec 14, 2021 · NDIS supports offloading TCP/IP checksum tasks at run time. Note: Checksum offload out-of-band (OOB) data is stored in the NET_BUFFER_LIST information array.
  31. [31]
    Offload the Segmentation of Large TCP Packets - Windows drivers
    Jan 31, 2025 · Learn how NDIS miniport drivers can offload the segmentation of large TCP packets.
  32. [32]
    Introduction to Receive Side Scaling (RSS) - Windows drivers
    RSS improves network performance by reducing processing delays and optimizing CPU utilization across your system. Note. Because hyper-threaded CPUs on the same ...
  33. [33]
    Interrupt Moderation - Windows drivers - Microsoft Learn
    Jan 31, 2025 · To allow accurate measurement of roundtrip time for a packet, NDIS provides the ability to disable and enable interrupt moderation on demand.Missing: coalescing | Show results with:coalescing
  34. [34]
    Overview of Packet Coalescing - Windows drivers - Microsoft Learn
    Jan 31, 2025 · Learn how NDIS packet coalescing reduces the number of receive interrupts and lowers processing overhead.
  35. [35]
    Network OIDs - Windows drivers | Microsoft Learn
    Dec 14, 2021 · OIDs are system-defined. NDIS handles many of the OID requests for miniport drivers and NDIS does not pass such requests on to the miniport ...
  36. [36]
    OID_GEN_MEDIA_CONNECT_S...
    Feb 18, 2023 · NDIS handles this OID for NDIS 6.0 and later miniport drivers. The OID_GEN_MEDIA_CONNECT_STATUS OID requests the connection status of the NIC on ...
  37. [37]
    WMI Requirements for WDM Drivers - Windows - Microsoft Learn
    Dec 14, 2021 · For instance, SCSI miniport drivers and NDIS miniport drivers can register as WMI providers and supply WMI data to their corresponding class ...
  38. [38]
    MSFT_NetAdapter class - Win32 - Microsoft Learn
    May 9, 2024 · The GUID for the network interface. InterfaceIndex. Data type: uint32. Access type: Read-only. The index that identifies the network interface.
  39. [39]
    Get-NetAdapterBinding (NetAdapter) | Microsoft Learn
    The Get-NetAdapterBinding cmdlet gets a list of bindings for a network adapter. By default only the visible bindings shown in the Networking tab under the ...Missing: NDIS GUID enumeration
  40. [40]
    NdisWriteEventLogEntry function (ndis.h) - Windows drivers
    Apr 18, 2022 · NdisWriteEventLogEntry allocates an I/O error log record, fills in the record with the supplied information about the event, and then writes the record to the ...
  41. [41]
    OID_GEN_STATISTICS - Windows drivers - Microsoft Learn
    Feb 6, 2024 · The number of bytes in directed packets that are received without errors. This count is the same value that OID_GEN_DIRECTED_BYTES_RCV ...
  42. [42]
    Device Power States for Network Adapters - Windows drivers
    Dec 14, 2021 · D0 is the highest-powered state. D1, D2, and D3 are the sleeping states. D3 is subdivided into D3hot and D3cold. The state number is inversely ...Missing: 5.0 | Show results with:5.0
  43. [43]
    Low Power for Wake on LAN - Windows drivers | Microsoft Learn
    Dec 14, 2021 · NDIS uses OID_PNP_SET_POWER to notify the miniport driver of the new power state (D3). The miniport driver may indicate an unknown media ...<|separator|>
  44. [44]
    Overview of NDIS Selective Suspend - Windows drivers
    Mar 13, 2023 · By suspending idle USB adapters, the CPU overhead can be reduced by as much as 10 percent. NDIS selective suspend is based on the USB selective ...
  45. [45]
    Introduction to Remote NDIS (RNDIS) - Windows drivers
    Sep 27, 2024 · Remote NDIS (RNDIS) is a bus-independent class specification for Ethernet (802.3) network devices on dynamic Plug and Play (PnP) buses.
  46. [46]
    Quality of Service (QoS) Support in NDIS 6.30 - Windows drivers
    Mar 13, 2023 · NDIS 6.30 and later provide support for quality of service (QoS). Miniport drivers use NDIS QoS for traffic prioritization of transmit, ...Missing: shaping | Show results with:shaping
  47. [47]
    Determining Task Offload Capabilities - Windows drivers
    Dec 14, 2021 · NDIS provides the task offload hardware capabilities and current configuration of the underlying miniport adapter to filter drivers in the NDIS ...Missing: offloads | Show results with:offloads
  48. [48]
    Download the Windows Driver Kit (WDK) - Microsoft Learn
    Sep 24, 2025 · Use the WDK to develop, test, and deploy drivers for Windows. Install and run the latest released WDK on Windows 7 and later.Install the WDK using NuGet · Install the WDK using WinGet · Other WDK downloads
  49. [49]
    Initializing a Miniport Driver - Windows drivers
    ### Summary of NDIS Miniport Driver Initialization
  50. [50]
  51. [51]
    NdisSendNetBufferLists function (ndis.h) - Windows drivers
    Apr 17, 2022 · Protocol drivers call the NdisSendNetBufferLists function to send network data that is contained in a list of NET_BUFFER_LIST structures.Missing: key NetBuffer unified model
  52. [52]
    MINIPORT_PNP_IRP (ndis.h) - Windows drivers | Microsoft Learn
    Oct 21, 2021 · The MiniportPnpIrp function enables a miniport driver to optionally manage its Plug and Play (PnP) resources.Missing: NdisMRegisterMiniport NdisSendNetBufferLists
  53. [53]
    Porting NDIS 6.x drivers to NDIS 6.70 - Windows - Microsoft Learn
    Mar 13, 2023 · Starting in NDIS 6.70, however, NDIS driver developers can also write a NIC driver using the new Network Adapter WDF Class Extension, a.k.a. ...
  54. [54]
    Overview of NDIS Debugging - Windows drivers | Microsoft Learn
    Mar 10, 2022 · The two primary tools for debugging a network driver are debug tracing and the Network Driver Interface Specification (NDIS) extensions.
  55. [55]
    NDISTest 6.0 - \1 Machine\ - 1c_WMICoverage | Microsoft Learn
    Mar 17, 2021 · This test queries driver information using WMI. First, this test obtains the list of GUIDs supported by the driver (and by NDIS on behalf of ...
  56. [56]
    Version Information Requirements for NDIS Drivers - Microsoft Learn
    Mar 13, 2023 · For example, an NDIS 5.1 driver or an NDIS 6.1 driver can run on a version of the operating system that is running NDIS 6.0. The NDIS 5.1 driver ...
  57. [57]
    NDIS 6.20 Backward Compatibility - Windows drivers - Microsoft Learn
    Mar 13, 2023 · NDIS 5.x and earlier NDIS drivers are deprecated in Microsoft Windows versions after Windows 7. No new NDIS 5.x drivers will be WHQL certified.Missing: history | Show results with:history
  58. [58]
    Introduction to Connection-Oriented NDIS - Windows drivers
    Mar 14, 2023 · This section describes connection-oriented NDIS (CoNDIS). Most CoNDIS 6.0 and later driver operations have not changed from their CoNDIS 5.x ...
  59. [59]
    INF DDInstall.CoInstallers Section - Windows drivers - Microsoft Learn
    Jul 17, 2023 · The Co-Installers section registers one or more device-specific co-installers to supplement the operations of existing device class ...