Totarget 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.
We get acquainted with the concept of the future solution and sign a non-disclosure agreement. The team gathers project requirements, studies relevant documents, and analyzes rival products on the market. At this phase, a preliminary project evaluation is made.
We select libraries, languages, and tools and start development, factoring in device features and hardware configuration. The team identifies and eliminates bugs and optimizes the performance of the software. Customers receive daily reports on the progress. If necessary, the plan can be amended.
The team tests all the software functions. We check its performance under corresponding operating conditions and run some tests required for product certification. If necessary, the product is then modified.
Upon project completion, the customer receives a fully functional software product, source codes, and detailed technical documentation. The customer will receive all the necessary instructions on how to use the product. We will also answer any questions and provide training if necessary.
The cession of intellectual property rights is legislated in our contracts. We also sign a non-disclosure agreement to protect any sensitive information. We will mention your project on our website and other platforms only with your permission.
Yes, you can. If you split a driver into two parts, one part will be able to access some kernel-mode resources or features, and the other part will run in user mode and receive I/O requests from the kernel-mode driver.
Windows devices use digital signatures upon installation. This is done to verify the integrity of driver packages and the identity of the software publisher. Also, according to the kernel-mode code signing policy for 64-bit versions of Windows 8 and later versions of Windows, a kernel-mode driver must be signed with Microsoft's certificate or a certificate of a Microsoft partner for the driver to load.
We develop drivers for the most common Windows versions, including Windows 8, 8.1, 10, and 11, as well as Windows Server 2022. We can also provide driver development for older versions if you need it, but they are no longer supported by Microsoft.
We pay great attention to the quality of our work. The customer receives fully functional software and a detailed user manual. After finishing the project, we provide a free warranty period, during which the team will eliminate any discovered bugs. During the post-warranty period, we can also provide advice on possible modernization and modification of your product.
The timing of a project largely depends on its specifics, complexity, scale, choice of components, and logistics. For example, a project audit can take 1-2 months, while AI-based software development usually lasts much longer. We always set realistic deadlines when preparing the spec and stick to the schedule at all project stages.
We develop projects for private enterprises and public organizations: small, medium, and large businesses, mining and manufacturing enterprises, startups, healthcare organizations, and enterprises engaged in other industries.
We use cookies to improve your experience on our website. Our Cookies Policy explains what cookies are, how we use cookies and how third-parties we may partner with may use cookies. Please find more information here.
This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.
While applications with user-friendly interfaces run in user mode, some protected data can only be accessed in kernel mode. To securely and efficiently work with user data, applications rely on software drivers that process user mode requests and deliver results back to the application.
In this article, we provide a practical example of writing a Windows Driver Model (WDM) driver for encrypting a virtual disk that stores user data. Most of the steps described will also work for other types of drivers. This article will be useful for development teams and project leaders who are considering developing a custom software driver.
Before Visual Studio 2012 (WDK 8.0), Windows Driver Kit was a standalone solution that had its own compiler and other tools needed for developing a Windows driver. Driver assembly used to consist of two main steps:
WDK is currently integrated into Visual Studio via an extension that gets installed automatically. Therefore, you no longer need to work with Sources and Makefile, as you can select the project type, WDK version, and libraries to link to your driver in project settings.
When you use older versions of WDK to build drivers supporting Windows OS, your driver should also be able to support newer versions of Windows. However, to enable support for older Windows versions, you might need to use older versions of WDK when building your driver.
To make it easier to write drivers, Microsoft created the Windows Driver Framework (WDF). This framework can help you significantly shorten the code for interacting with Plug and Play (PnP) devices and power management.
Our driver is responsible for performing read/write operations on our virtual disk. The WdmDrvTest.exe application is responsible for encrypting and decrypting data. This application can also read and write data to and from the file where our virtual disk is stored. Therefore, our driver will delegate the processing of read/write operations to wdmDrvTest.exe.
However, while the Main function executes a certain algorithm and then returns control to the operating system, a driver remains loaded in memory and waits for Windows to call the appropriate handler in response to a new event even after execution of the DriverEntry function.
Explore our comprehensive guide on IOKit driver matching and unlock the key to seamless macOS driver development. Master the essential techniques and best practices for ensuring compatibility and reliability in your driver projects!
IoCreateDeviceSecure allows us to additionally specify the parameters for the DefaultSDDLString security descriptor. For example, we can specify which user groups can write to the device. Starting from Windows 7, this parameter must be used to, for instance, successfully format a disk.
The DeviceName parameter is the name of the device, which might look like \Device\MyDevice. This parameter is created in the Device directory, which is a standard directory where all devices in the system are listed. To view this directory, we can use the winobj utility. Here is our virtual disk in the Device directory:
3a8082e126