FindWDK
FindWDK copied to clipboard
CMake module for building drivers with Windows Development Kit (WDK)
FindWDK
CMake module for building drivers with Windows Development Kit (WDK)
- Introduction
- Usage
- Kernel driver
- Kernel library
- Linking to WDK libraries
- Samples
- License
- Version history
Introduction
FindWDK makes it possible to build kernel drivers and kernel libraries with Windows Development Kit (WDK) and CMake.
Requirements:
- WDK10
- Visual Studio 2015 and higher
- CMake 3.0 and higher
Usage
Add FindWDK to the module search path and call find_package:
list(APPEND CMAKE_MODULE_PATH "<path_to_FindWDK>")
find_package(WDK REQUIRED)
FindWDK will search for the installed Windows Development Kit (WDK) and expose commands for creating kernel drivers and kernel libraries. Also the following variables will be defined:
WDK_FOUND-- if false, do not try to use WDKWDK_ROOT-- where WDK is installedWDK_VERSION-- the version of the selected WDKWDK_WINVER-- the WINVER used for kernel drivers and libraries (default value is0x0601and can be changed per target or globally)WDK_NTDDI_VERSION-- the NTDDI_VERSION used for kernel drivers and libraries, if not set, the value will be automatically calculated by WINVER
Kernel driver
The following command adds a kernel driver target called <name> to be built from the source files listed in the command invocation:
wdk_add_driver(<name>
[EXCLUDE_FROM_ALL]
[KMDF <kmdf_version>]
[WINVER <winver_version>]
[NTDDI_VERSION <ntddi_version>]
source1 [source2 ...]
)
Options:
EXCLUDE_FROM_ALL-- exclude from the default build targetKMDF <kmdf_version>-- use KMDF and set KMDF versionWINVER <winver_version>-- use specific WINVER versionNTDDI_VERSION <ntddi_version>-- use specific NTDDI_VERSION
Example:
wdk_add_driver(KmdfCppDriver
KMDF 1.15
WINVER 0x0602
Main.cpp
)
Kernel library
The following command adds a kernel library target called <name> to be built from the source files listed in the command invocation:
wdk_add_library(<name> [STATIC | SHARED]
[EXCLUDE_FROM_ALL]
[KMDF <kmdf_version>]
[WINVER <winver_version>]
[NTDDI_VERSION <ntddi_version>]
source1 [source2 ...]
)
Options:
EXCLUDE_FROM_ALL-- exclude from the default build targetKMDF <kmdf_version>-- use KMDF and set KMDF versionWINVER <winver_version>-- use specific WINVER versionNTDDI_VERSION <ntddi_version>-- use specific NTDDI_VERSIONSTATIC or SHARED-- specify the type of library to be created
Example:
wdk_add_library(KmdfCppLib STATIC
KMDF 1.15
WINVER 0x0602
KmdfCppLib.h
KmdfCppLib.cpp
)
Linking to WDK libraries
FindWDK creates imported targets for all WDK libraries. The naming pattern is WDK::<UPPERCASED_LIBNAME>. Linking a minifilter driver to FltMgr.lib is shown below:
target_link_libraries(MinifilterCppDriver WDK::FLTMGR)
Samples
Take a look at the samples folder to see how WMD and KMDF drivers and libraries are built.
License
FindWDK is licensed under the OSI-approved 3-clause BSD license. You can freely use it in your commercial or opensource software.
Version history
Version 1.0.1 (13 Mar 2018)
- New: Add ability to link to WDK libraries
- New: Add MinifilterCppDriver sample
- Fix: W4 warnings in C version of the driver, add missing /W4 /WX for C compiler
Version 1.0.0 (03 Feb 2018)
- Initial public release