Win1909+vs2019+Windows 10 WDK 2004(10.0.19041.1) + Windows 10 SDK 2004(10.0.19041.1)环境搭建
- 安装vs2019,安装的时候,Workloads选项卡必须选中“Desktop developmet with c++”,这个是驱动开发必须的。
“Individual components”选项卡里,必须选中“Visual Studio SDK”(注意不是Windows SDK),这样在安装WDK的时候,才会安装VS插件(即vs开始菜单中增加Driver菜单项,且VS创建工程的时候,可以选项驱动类型的工程模板)。
- 安装Windows 10 SDK 2004(10.0.19041.1),否则在安装Windows 10 WDK 2004(10.0.19041.1)的时候,会提示SDK不兼容。
- 安装Windows 10 WDK 2004(10.0.19041.1)
- 新建Empty WDM Driver工程
创建First.c文件并加入到工程,内容如下:
#include <ntddk.h>
void DriverUnload(PDRIVER_OBJECT pDriverObject)
{
}
NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING pRegPath)
{
if (NULL != pDriverObject)
{
pDriverObject->DriverUnload = DriverUnload;
}
return STATUS_SUCCESS;
}
5. 编译,出现错误:
1>------ 已启动生成: 项目: MyDriver1, 配置: Debug x64 ------
1>Building 'MyDriver1' with toolset 'WindowsKernelModeDriver10.0' and the 'Desktop' target platform.
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Microsoft\VC\v160\Microsoft.CppBuild.targets(458,5): error MSB8040: 此项目需要缓解了 Spectre 漏洞的库。从 Visual Studio 安装程序(单个组件选项卡)为正在使用的任何工具集和体系结构安装它们。了解详细信息: https://aka.ms/Ofhn4c
1>已完成生成项目“MyDriver1.vcxproj”的操作 - 失败。
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
这个错误提示要在VS2019安装程序中,定位到“单个组件”选项卡,把Spectre组件安装了,经搜索,有大量Spectre选项,先把X86/X64的全装了,大约10几GB。
重新编译,也是然并卵。
还是没有把引起编译错误的关键Spectre项安装上。从上图可以看到,这些Spectre是针对不同SDK版本的,有for ATL V141的,有For C++ V14.20的,有“带有Spectre缓解措施的C++ v14.21 ATL for V142生成工具”的,这里有从v14.21到v14.27。全装太大,该装哪个呢,突然想到可以从工程配置中找一找。在工程宏中,搜索14.2,出来的全是14.27,所以可以确认,我们需要的是14.27版本:
接着,在vs2019安装程序中,搜索14.27:
把这些都安装上,生新编译,这个错误就没有了。
也可以采用第二种方案,就是设置工程,让它不使用Spectre缓解:
如果编译出现下面的错误:
1>------ Build started: Project: FirstDriver, Configuration: Debug x64 ------
1>Building 'FirstDriver' with toolset 'WindowsKernelModeDriver10.0' and the 'Desktop' target platform.
1>C:\Program Files (x86)\Windows Kits\10\build\WindowsDriver.common.targets(460,5): error MSB6004: The specified task executable location "\stampinf.exe" is invalid.
1>Done building project "FirstDriver.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
表示SDK的版本与WDK的版本不一致,我们只需要在vs工程中,重新指定SDK版本即可:
对于WDK1709,我们指定与之匹配的SDK版本:10.0.16299.0
6. 再次编译,出现如下错误:
1>------ 已启动生成: 项目: MyDriver2, 配置: Debug x64 ------
1>Building 'MyDriver2' with toolset 'WindowsKernelModeDriver10.0' and the 'Desktop' target platform.
1>Stamping x64\Debug\MyDriver2.inf
1>Stamping [Version] section with DriverVer=09/24/2020,17.53.38.653
1>D:\myvc\MyDriver2\MyDriver2.inf : error 1297: Device driver does not install on any devices, use primitive driver if this is intended.
1>已完成生成项目“MyDriver2.vcxproj”的操作 - 失败。
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
不管它,先把MyDriver2.inf从工程中移除,
7. 再次编译,出现如下错误:
1>------ 已启动生成: 项目: MyDriver2, 配置: Debug x64 ------
1>Building 'MyDriver2' with toolset 'WindowsKernelModeDriver10.0' and the 'Desktop' target platform.
1>First.c
1>D:\myvc\MyDriver2\First.c(3,34): error C2220: 以下警告被视为错误
1>D:\myvc\MyDriver2\First.c(3,34): warning C4100: “pDriverObject”: 未引用的形参
1>D:\myvc\MyDriver2\First.c(8,68): warning C4100: “pRegPath”: 未引用的形参
1>已完成生成项目“MyDriver2.vcxproj”的操作 - 失败。
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
说是两个参数没有被使用,在驱动开发中,要求比较严苛,警告默认都是当错误来对待的。最简单的方法是,在代码中引用一下这两个变量,例如增加下面两行,只引用,什么也不干:
pDriverObject;
pRegPath;
这种写法太Low了,驱动提供了一个宏,专门用来引用变量:
UNREFERENCED_PARAMETER(pDriverObject);
引用后再次编译,可编译通过,生成.sys和.pdb文件。
总结:就是WDK版本和SDK版本要一致才行,例如,都是10.0.16299.x版本(后面的x代表的小版本可以不同)。另外,有时候Clear all工程还是编译不过,但关闭vs后清空临时文件再编译就可以了,很是诡异。
Win1909+vs2019+Windows 10 WDK 2004(10.0.19041.1) + Windows 10 SDK 2004(10.0.19041.1)环境搭建相关推荐
- 一起学ASP.NET Core 2.0学习笔记(一): CentOS下 .net core2 sdk nginx、supervisor、mysql环境搭建...
作为.neter,看到.net core 2.0的正式发布,心里是有点小激动的,迫不及待的体验了一把,发现速度确实是快了很多,其中也遇到一些小问题,所以整理了一些学习笔记: 阅读目录 环境说明 安装C ...
- .NET6入门:1.Windows开发环境搭建
作为.NET的最新版本.NET6长期支持版已经发布,.NET6宣称是迄今为止最快的.NET.那当然不能落下时代的潮流,就让我们跟着文章进入.NET6的世界吧. 1. .NET6SDK下载 Downlo ...
- VS2019中出现【Windows SDK】找不到 Windows SDK 版本10.0.18362.0的解决办法
VS2019中出现[Windows SDK]找不到 Windows SDK 版本10.0.18362.0的解决办法 方法一:在项目上右击选择重定目标解决方案,将windosSdk的版本号选择10.0. ...
- VS2019遇见的常见错误之一及其解决办法( MSB803 找不到Windows SDK版本 10.0.18362.0.请安装所需版本的 Windows SDK,或者在项目属性页中或通过右键单击解决
VS 2019 遇见的常见错误之一及其解决办法( MSB803 找不到Windows SDK版本 10.0.18362.0.请安装所需版本的 Windows SDK,或者在项目属性页中或通过右键单击解 ...
- MSB8036 The Windows SDK version 10.0 was not found. Install the required version of Windows SDK o
MSB8036 The Windows SDK version 10.0 was not found. Install the required version of Windows SDK o ...
- Veritas NetBackup 10.0 (Unix, Linux, Windows)
请访问原文链接:https://sysin.org/blog/veritas-netbackup-10/,查看最新版.原创作品,转载请保留出处. 作者主页:www.sysin.org 一流的企业备份和 ...
- VS SDK更新问题(error MSB8036: 找不到 Windows SDK 版本10.0.14393.0)
问题:error MSB8036: 找不到 Windows SDK 版本10.0.14393.0,此时会造成项目编译失败 解决办法:下载相应版本的SDK安装,然后修改VS关于SDK版本的配置 WIN1 ...
- 找不到 Windows SDK 版本10.0.17134.0的解决办法
找不到 Windows SDK 版本10.0.17134.0 在VS2017项目中重新生成解决方案时候,报错如下: 百度一下找到解决方案如下:去微软官网找到对应的SDK包,安装即可 win10 SDK ...
- VisualStudio 2017:connot open source file XXX.h 以及The Windows SDK version 10.0.17134.0 was not found
换了新的笔记本电脑,然后把移动硬盘上以前的项目都给配置一下,解过发现莫名其妙的抽风了-- 系统库函数打不开了,第一反应是VS装的有问题,遂用Visual Studio Installer点击修复,无果 ...
- Visual Studio找不到 Windows SDK 版本10.0.17134.0的解决办法
在网上搜索答案,很多都是右键解决方案-> 重定解决方案.但是我的Visual Studio2017没有这个选项. 最后解决方案是打开Visual Studio Installer,下载单个组件 ...
最新文章
- hadoop2.2.0 集群安装配置
- 计算机项目管理报告,《软件项目管理》报告.doc
- 8 Redis 持久化RDB
- 1.3.3 错题整理(组成原理)
- html中加入js,html嵌入js
- Java BufferedReader skip()方法与示例
- [html] 你知道什么是反向链接吗?它有什么应用场景呢?
- [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第32篇]基于博弈的证明和基于模拟的证明
- webdriver.chrome()禁止加载图片
- 电脑控制手机屏幕软件_手机屏幕如何投屏到电脑
- 使用IBM WID 建立SOA 之WID简介
- linux下监控磁盘空间脚本
- underscore源码学习笔记(一)
- HDOJ2003求绝对值
- vue 微信支付的坑_微信支付踩坑
- Spring Boot 8:Spring Boot整合Redis
- 在线运行html代码网站汇总(HTML代码在线运行实用网站收集)
- 1156:求π的值(C C++)
- RSF 异步访问性能分析报告 - 百兆网卡下的彪悍性能
- 爬虫系列之爬取1688
热门文章
- python代码扫描工具_Python脚本实现Web漏洞扫描工具
- C语言程序段的定义、实际应用分析
- 一文读懂软考高项(高级-信息系统项目管理师)+无套路学习资料
- 格拉布斯法—异常值判断(异常值)
- 平稳时间序列以及MATLAB相关工具箱学习笔记
- 人工智能:状态空间图(超详细经典例题讲解,通过例题教会你如何解决状态空间图问题)
- 有幸为鲍勃大叔的封山之作《匠艺整洁之道》写了推荐序,顺手赠书!
- 证件照制作(一寸二寸照片制作)微信小程序源码
- 原声php 读取excel乱码_如何解决php读取excel乱码问题
- 李江涛:使用Sakai构建开放式教学平台