A driver is a software component that lets the operating system and a device communicate. For example, when an app needs to read data from a device, it calls a function implemented by the operating system. The operating system then calls a function implemented by the driver. The driver, usually developed by the device's manufacturer, knows how to communicate with the device hardware to get the data. Once the driver gets the data, it gives it back to the operating system, which then gives it back to the app.
Drivers don't always have to be developed by the device's manufacturer. If a device follows a published hardware standard, Microsoft can write the driver, so the device designer doesn't have to provide one.
Not all drivers communicate directly with a device. Often, several drivers layered in a driver stack take part in an I/O request. The conventional way to visualize the stack is with the first participant at the top and the last participant at the bottom, as shown in this diagram. Some drivers in the stack change the request from one format to another. These drivers don't communicate directly with the device. Instead, they change the request and pass it to drivers that are lower in the stack.
Some filter drivers observe and record information about I/O requests but don't actively take part in them. For example, some filter drivers act as verifiers to make sure the other drivers in the stack handle the I/O request correctly.
For example, if you need to write a tool that accesses core operating system data structures, you can split the tool into two components. The first component runs in user mode and presents the user interface. The second component runs in kernel mode and accesses the core operating system data. The component that runs in user mode is called an application, and the component that runs in kernel mode is called a software driver. A software driver isn't associated with a hardware device.
Software drivers always run in kernel mode. They're primarily written to access protected data only available in kernel mode. However, not all device drivers need access to kernel-mode data and resources, so some device drivers run in user mode.
Our explanation so far oversimplifies the definition of function driver. We stated that the function driver for a device is the one driver in the stack that communicates directly with the device. This is true for a device that connects directly to the Peripheral Component Interconnect (PCI) bus. The function driver for a PCI device obtains addresses that are mapped to port and memory resources on the device. The function driver communicates directly with the device by writing to those addresses.
However, in many cases, a device doesn't connect directly to the PCI bus. Instead, the device connects to a host bus adapter that is connected to the PCI bus. For example, a USB toaster connects to a host bus adapter (called a USB host controller), which is connected to the PCI bus. The USB toaster has a function driver, and the USB host controller also has a function driver. The function driver for the toaster communicates indirectly with the toaster by sending a request to the function driver for the USB host controller. The function driver for the USB host controller then communicates directly with the USB host controller hardware, which communicates with the toaster.
To target Windows 8.1, Windows 8, and Windows 7, install an older WDK and an older version of Visual Studio either on the same machine or on a separate machine. For links to older kits, see Other WDK downloads.
Join the Windows Insider Program to get WDK Insider Preview builds. For installation instructions for the Windows Insider Preview builds, see Installing preview versions of the Windows Driver Kit (WDK).
The WDK NuGet package consists of essential libraries, headers, DLL, tools, and metadata used for building Windows drivers that can be shared and supported by modern CI/CD pipelines. Users can access and consume the NuGet packages directly from nuget.org within Visual Studio. Using NuGet with the WDK provides a convenient solution for WDK acquisition and updates. It manages dependencies such as the SDK, to help keep the driver development tool chain up to date. For more information, see Install the latest WDK using NuGet - Step by Step.
Starting with WDK version 10.0.26100.1, the WDK now supports development, testing and deployment of drivers on ARM64 machines. The WDK/EWDK can be installed and run natively on ARM64 hardware, in addition to the previously supported emulation of x86 KMDF/UMDF2 drivers on ARM64 hardware. There is also support for debugging and deployment of drivers to an ARM64 target machine from both ARM64 and x64 host machines. The process of installing WDK/EWDK on ARM64 machines will automatically identify and install all the necessary dependencies including build tools, binaries, and libraries.
The provided links for the SDK and the WDK have matching build numbers, which is always required for the kits to work together. If you decide to install your own SDK/WDK pair, perhaps for a different Windows version, ensure that the build numbers match. For more details, see Kit versioning.
As an alternative to downloading Visual Studio, the SDK, and the WDK, you can download the EWDK, which is a standalone, self-contained command-line environment for building drivers. It includes Visual Studio Build Tools, the SDK, and the WDK.
You can optionally use the Visual Studio interface with the build tools provided in the EWDK. To do this, ensure that the Visual Studio major version matches the version of the Visual Studio Build Tools in the EWDK. For example, Visual Studio 2022 works with the EWDK that contain VS17.X build tools. For a list of Visual Studio 2022 version numbers, see Visual Studio 2022 Releases.
To build a driver, the build number of your SDK installation must match the build number of your WDK installation. The QFE values does not need to match unless your driver uses functionality that is only available in the headers included with a later QFE.
A quick way to see the full build string for locally installed kits is to go to Windows settings (Win+I), navigate to Apps, then Installed apps, and in the Search box type kit. The full build string appears to the right of the kit name. If you navigate to C:\Program Files (x86)\Windows Kits\10\Include, note that the QFE shown there is hardcoded to .0, so this is not a reliable way to check your QFE identifier. Also note that when you install a kit, the new installation replaces any previously existing installation of the same build number. When you install Visual Studio with the Desktop development with C++ workload, if the installation payload includes the Windows SDK, the right-hand Summary pane also shows a hardcoded .0 for QFE.
I have a few handheld radios that I need to update the frequencies and when I connect to the USB, it fails to connect. In device manager and Ports it says - "Please install corresponding PL2303 driver to support Windows 11 and further OS"
Hello! You've posted your question in the Tech Community Discussion space, which is intended for discussion around the Tech Community website itself, not product questions. I'm moving your question to the Windows 11 space - please post Windows 11 questions here in the future.
Windows 11 update loaded Prolific PL2303 driver 3.8.40.0 and when I go to device manager it says "Please install corresponding PL2303 driver to support Windows 11 and further OS" This driver does not even attempt to communicate with my X10 CM11 hooked to my serial port. I had to go to Prolific website and load their current driver 3.6.81.357. (uninstall driver first) Serial to X10 device now working fine. Don't install Windows update for Prolific or it will change it back.
The CP210x USB to UART Bridge Virtual COM Port (VCP) drivers are required for device operation as a Virtual COM Port to facilitate host communication with CP210x products. These devices can also interface to a host using the direct access driver.
The CP210x Manufacturing DLL and Runtime DLL have been updated and must be used with v 6.0 and later of the CP210x Windows VCP Driver. Application Note Software downloads affected are AN144SW.zip, AN205SW.zip and AN223SW.zip. If you are using a 5.x driver and need support you can download Legacy OS Software.
I see that the GPIB-USB-B compatibility ended with version NI 488.2 version 17.6. I have 20 installed so the 17.6 install doesn't fully run since a higher version is installed. Do I have to uninstall 20 to use my NI hardware?
Why yes. It turns out that's exactly what I have to do. I uninstalled 20 and installed 17.6 and it works. Does that mean it will keep that driver if I upgrade to 20 now or will it kill the device? I guess I'll see when I add a device that isn't compatible with 17.6.
I have two devices to be operated simultaneously. But one device was not supportet in v17.6 yet the other is the GPIB-USB-B. So I had to find a way to get them both running in the latest environment as I had no option to uninstall v20.0.
We are trying to communicate between an Agilent light meter via a Keysight software through GPIB-USB-B. I see that the GPIB-USB-B is supported by NI 488.2 v17.6 and older drivers. I get a runtime Engine error of LabVIEW.
Hello.Just purchased a new Dell tower and am bummed that my trusty imageCLASS D420 will not work with windows 11(at least i don`t think as i cannot find an 11 driver.Much obliged if anyone knows a way i can get them to communicate.BIG thanx!
Hi Hector - thanks for the reply. I am able now to connect to the printer with a USB cable, but through my wired network. Is there a factory reset procedure so I can reset all of the network features?
Windows 10 drivers do not work for me on a Windows 11 HP Pavilion, installing as a local printer. Printer installs but does not print test page, nor a Word document. Document just stays in print queue.
Addition by JustDon: My problem has been solved. Here is what I think I did wrong. First, I had the printer plugged in to the PC and turned on when I ran setup.exe to install the drivers. Second, I tried to install it in LPT1, the parallel port when it needs a USB port. With the drivers improperly installed, there was no choice of a USB port. Properly installed, a port named USB001 was added to the port list. An aside: I read that some older printers can't run on the new high speed USB ports, but after I installed it in a USB 2.0 port, I moved it to a "super speed" usb port and it worked fine. So yes, the ImageClass D420 can be installed on a Windows 11 PC (mine is a HP Pavillion) using the Windows 10 drivers, as Hector said, but if you don't install them correctly, you may mistakenly conclude it won't work.
4a15465005