Windows Driver Kit 8
The Windows Driver Kit (WDK) includes the tools and documentation you need to develop drivers. WDK 8 is integrated into Visual Studio 2012 Professional, Premium, and Ultimate and provides most of the tools you need for developing, building, packaging, testing, and debugging drivers.
To learn more about the kit, visit
Windows Driver Kit (WDK).
Version: Windows Driver Kit (WDK) 8
Date published: August 15, 2012
File name: wdksetup.exe
On This Page
Other Hardware Development Kits and Tools
- Before you begin, you must first install Visual Studio Professional 2012 or above.
- If you are building device drivers that rely on the Windows Driver Framework (WDF), you will need to
install the WDFCOINSTALLER.MSI. These bits provide the co-installers for WDF and are used by many of the WDK samples.
|WDK 8 supports development of drivers that run on these versions of Windows.||You can run the integrated Visual Studio driver development environment on these versions of Windows.|
|Windows 8||Windows 8|
|Windows Server 2012||Windows Server 2012|
|Windows 7||Windows 7|
|Windows Vista SP1||Windows Server 2008 R2|
|Windows Server 2008 R2|| |
|Windows Server 2008 SP1|| |
Top of page
You can install the WDK 8 on Windows Server 2008, Windows 7, Windows 8, and Windows Server 2012. Before you install the WDK, you must first install Visual Studio 2012 Professional, Visual Studio 2012 Premium, or Visual Studio 2012 Ultimate. The WDK uses Visual Studio extensions that are installed only if Visual Studio is installed before the WDK.
To install the WDK 8:
- Run wdksetup.exe.
- In the Specify Location screen, provide an installation path or accept the default by clicking Next.
- In the Join the Customer Experience Improvement Program (CEIP) screen, select Yes or No and then click Next.
- On the License Agreement screen, select Accept to install the WDK.
If you are building KMDF or UMDF drivers, you must install the wdfcoinstaller.msi package from the same location where you downloaded the WDK. This package contains the WDF co-installers. You can load this package from the WDK 8 redistributables download page at:
To finish installing the WDK 8, you are required to restart your computer. When you install the WDK on Windows 8 or Windows 7, the Restart dialog box takes focus from the WDF installation web page. Don't let this change of focus distract you from installing the WDK redistributables from this web page before you restart your computer.
The installation of the WDK redistributables is silent. You will not see a confirmation when the installation is complete. You can check that the redistributables have been installed by checking for the redist\wdf directory under the WDK directory, %ProgramFiles(x86)%\Windows Kits\8.0\.
Top of page
These release notes contain information about the Windows Driver Kit (WDK) 8 release.
- Device Simulation Framework (DSF): Device Simulation Framework has been deprecated from the WDK.
Core WDK Issues
- Midl.exe does not work for file names that contain spaces: Microsoft IDL Compiler (midl.exe) fails to compile when file names contain spaces.
Workaround: Move drivers located under paths that contain spaces to another location. In addition, rename file names that contain spaces.
- The /KERNEL flag is added to kernel-mode components: This flag enforces rules for C++ usage that were previously unchecked. The /KERNEL flag is enabled only for the compiler in this release to enable you to address any errors the compiler reports without blocking the linking stage after the code compiles cleanly.
The /KERNEL flag does the following:
- Explicitly disables the use of run-time type identification (RTTI).
- Explicitly disables the use of native exception handling. Structured exception handling is still supported.
- Predefines a new pre-processor macro named _KERNEL_MODE, which has the value 1.
The /KERNEL flag is incompatible with the following flags: /EH, /GR, /clr.
Specifying an incompatible flag causes a build error.
The addition of this flag enables better control over paged and nonpaged code for classes and templates through new __declspec keywords.
A future WDK release might require that each object file that is linked into the final kernel-mode binary must be compiled with the /KERNEL flag. Failure to do so will cause a new linker warning, 4257, to be emitted.
- Using Signtool to time-stamp a binary: Signtool gives the user an option to add a timestamp to a signed file. The /td switch can be used to specify the hash algorithm that is used for the timestamp, and the /tr switch can be used to specify the URL of the timestamp server. Because of an error in the way Signtool parses the command-line parameters, specifying the /td switch before the /tr switch overrides the specified hash algorithm and sets it to the default algorithm, SHA1.
Workaround: Always specify the /td switch after the /tr switch.
signtool timestamp /td SHA256 /tr http://timeserver
signtool timestamp /tr http://timeserver /td SHA256
- Provisioning failure: When attempting to provision a target machine from a host machine with a username that contains spaces, provisioning will fail.
Workaround: Host machines with usernames that contain spaces are not supported. Change the username on the host machine to not contain spaces.
- SDV NDIS driver support: Static Driver Verifier (SDV) supports only NDIS drivers that use NDIS versions 6.0, 6.1, 6.2, and 6.3. If you receive an error message indicating that the SDV version you are using is not supported, please upgrade to NDIS version 6.3.
Workaround: Use either of the following techniques to upgrade to NDIS 6.3:
- Edit your vcxproj file to set the NDIS macros as follows:
- Use C_DEFINES tags in your driver sources file or post-conversion props file as follows:
<C_DEFINES Condition="'$(OVERRIDE_C_DEFINES)'!='true'">$(C_DEFINES) -DNDIS_WDM=1 -DNDIS630=1</C_DEFINES>
- SDV KmdfIrql Rule: The KmdfIrql rule fails if a KMDF driver marks as pageable the EvtDeviceWdmIrpPreprocess callback function for the IRP_MN_QUERY_DEVICE_RELATIONS PnP IRP. Although an EvtDeviceWdmIrpPreprocess callback function might be called at IRQL = DISPATCH_LEVEL for some IRPs, it is called only at PASSIVE_LEVEL for this particular IRP. The driver can safely make the callback function for this IRP pageable, but doing so causes the KmdfIrql rule to fail. This failure is caused by a false defect and can be ignored.
- Updates to ATA.h: ATA.h has been updated to reflect the changes in ATA8 ACS3 revision 1b and SATA 3.1.
- TDI Filters and LSPs cannot be included in a certification submission: Network transport driver interface (TDI) filters and layered service providers (LSPs) cannot be used by either kernel-mode or user-mode software or drivers. You cannot include TDI filters or LSPs in your Windows 8 certification submission. Your certification can be blocked if other software on the test computer (for example, anti-virus software) contains a TDI filter or LSP.
Workaround: Replace any TDI filters or LSPs in your software with calls to the Windows Filtering Platform (WFP) or other approved APIs. Remove other software that uses TDI filters or LSPs from the test computer.
- WpdBasicHardwareDriver sample: The current firmware and driver sources contain a potential bug that may result in truncated packets within the driver when the Parallax board is connected to the PC using Parallax RS232-to-USB converter.
- Modify the sample firmware for each sensor so that the outgoing packet contains an additional newline character ('\n') as the last character.
- Modify the sample firmware for each sensor so that the outgoing packet is transmitted at 9600 baud. See the Parallax documentation for the SEROUT command.
- In the file RS232Connection.h, increase the INTERVAL_DATA_LENGTH value from 5 to 6. This accounts for the new newline character at the end of each packet.
- In the file RS232Connection.h, increase the packet length for each sensor to account for the new newline character. For example, the value of PIR_DATA_LENGTH would increase from 4 to 5.
- In the file RS232Connection.cpp, increase the baud rate from 2400 to 9600. This is done by setting the m_dwBaudRate member-variable to CBR_9600 in the RS232Connection constructor.
- In the file RS232Connection.cpp, set the ReadIntervalTimeout member of the COMMTIMEOUTS structure to 25; set the four other members to 0.
- In the file RS232Connection.cpp, and in the code for the SetPortState method, add a line of code that sets the dcb.EofChar to the newline character ('\n'). This corresponds to the terminating character that you've added to the outgoing packets in the device firmware.
dcb.EofChar = '\n';
- Install the updated firmware on your test device.
- Build and install the updated sample driver.
Top of page
Other Hardware Development Kits and Tools
Top of page