Skip to main content

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).

Quick Details

Version: Windows Driver Kit (WDK) 8

Date published: August 15, 2012

File name: wdksetup.exe

1 GB

Download now

 


 

On This Page

Windows Update IntroductionSystem Requirements

Windows Update Introduction Installation Instructions

Windows Update Introduction Release Notes

Windows Update Introduction Other Hardware Development Kits and Tools

 


System Requirements

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 8Windows 8
Windows Server 2012Windows Server 2012
Windows 7Windows 7
Windows Vista SP1Windows Server 2008 R2
Windows Server 2008 R2 
Windows Server 2008 SP1 

Top of page Top of page

 


Installation Instructions

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:

  1. Run wdksetup.exe.
  2. In the Specify Location screen, provide an installation path or accept the default by clicking Next.
  3. In the Join the Customer Experience Improvement Program (CEIP) screen, select Yes or No and then click Next.
  4. 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 Top of page

 


Release Notes

These release notes contain information about the Windows Driver Kit (WDK) 8 release.

Redistributable Issues

  • 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.

    Incorrect usage:

    signtool timestamp /td SHA256 /tr http://timeserver

    Correct usage:

    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:

      <ClCompile>
       <AdditionalOptions>%(AdditionalOptions) /GS</AdditionalOptions>
       <PreprocessorDefinitions>%(PreprocessorDefinitions);NDIS_MINIPORT_DRIVER=1</PreprocessorDefinitions>
       <PreprocessorDefinitions>%(PreprocessorDefinitions);NDIS_WDM=1</PreprocessorDefinitions>   
       <PreprocessorDefinitions>%(PreprocessorDefinitions);NDIS63_MINIPORT=1</PreprocessorDefinitions>   
       <PreprocessorDefinitions>%(PreprocessorDefinitions);NDIS63=1</PreprocessorDefinitions>
       <TreatWarningAsError>true</TreatWarningAsError>  
       <WarningLevel>Level4</WarningLevel>
      </ClCompile>


    • 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.

Samples Issues

  • 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.

    Workaround:
    1. Modify the sample firmware for each sensor so that the outgoing packet contains an additional newline character ('\n') as the last character.
    2. 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.
    3. 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.
    4. 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.
    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.
    6. In the file RS232Connection.cpp, set the ReadIntervalTimeout member of the COMMTIMEOUTS structure to 25; set the four other members to 0.
    7. 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.

      For example:
      dcb.EofChar = '\n';
    8. Install the updated firmware on your test device.
    9. Build and install the updated sample driver.

Top of page Top of page

 


Other Hardware Development Kits and Tools

Top of page Top of page