1. 安装vs2019,安装的时候,Workloads选项卡必须选中“Desktop developmet with c++”,这个是驱动开发必须的。

“Individual components”选项卡里,必须选中“Visual Studio SDK”(注意不是Windows SDK),这样在安装WDK的时候,才会安装VS插件(即vs开始菜单中增加Driver菜单项,且VS创建工程的时候,可以选项驱动类型的工程模板)。

  1. 安装Windows 10 SDK 2004(10.0.19041.1),否则在安装Windows 10 WDK 2004(10.0.19041.1)的时候,会提示SDK不兼容。
  2. 安装Windows 10 WDK 2004(10.0.19041.1)
  3. 新建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)环境搭建相关推荐

  1. 一起学ASP.NET Core 2.0学习笔记(一): CentOS下 .net core2 sdk nginx、supervisor、mysql环境搭建...

    作为.neter,看到.net core 2.0的正式发布,心里是有点小激动的,迫不及待的体验了一把,发现速度确实是快了很多,其中也遇到一些小问题,所以整理了一些学习笔记: 阅读目录 环境说明 安装C ...

  2. .NET6入门:1.Windows开发环境搭建

    作为.NET的最新版本.NET6长期支持版已经发布,.NET6宣称是迄今为止最快的.NET.那当然不能落下时代的潮流,就让我们跟着文章进入.NET6的世界吧. 1. .NET6SDK下载 Downlo ...

  3. VS2019中出现【Windows SDK】找不到 Windows SDK 版本10.0.18362.0的解决办法

    VS2019中出现[Windows SDK]找不到 Windows SDK 版本10.0.18362.0的解决办法 方法一:在项目上右击选择重定目标解决方案,将windosSdk的版本号选择10.0. ...

  4. VS2019遇见的常见错误之一及其解决办法( MSB803 找不到Windows SDK版本 10.0.18362.0.请安装所需版本的 Windows SDK,或者在项目属性页中或通过右键单击解决

    VS 2019 遇见的常见错误之一及其解决办法( MSB803 找不到Windows SDK版本 10.0.18362.0.请安装所需版本的 Windows SDK,或者在项目属性页中或通过右键单击解 ...

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

  6. Veritas NetBackup 10.0 (Unix, Linux, Windows)

    请访问原文链接:https://sysin.org/blog/veritas-netbackup-10/,查看最新版.原创作品,转载请保留出处. 作者主页:www.sysin.org 一流的企业备份和 ...

  7. VS SDK更新问题(error MSB8036: 找不到 Windows SDK 版本10.0.14393.0)

    问题:error MSB8036: 找不到 Windows SDK 版本10.0.14393.0,此时会造成项目编译失败 解决办法:下载相应版本的SDK安装,然后修改VS关于SDK版本的配置 WIN1 ...

  8. 找不到 Windows SDK 版本10.0.17134.0的解决办法

    找不到 Windows SDK 版本10.0.17134.0 在VS2017项目中重新生成解决方案时候,报错如下: 百度一下找到解决方案如下:去微软官网找到对应的SDK包,安装即可 win10 SDK ...

  9. VisualStudio 2017:connot open source file XXX.h 以及The Windows SDK version 10.0.17134.0 was not found

    换了新的笔记本电脑,然后把移动硬盘上以前的项目都给配置一下,解过发现莫名其妙的抽风了-- 系统库函数打不开了,第一反应是VS装的有问题,遂用Visual Studio Installer点击修复,无果 ...

  10. Visual Studio找不到 Windows SDK 版本10.0.17134.0的解决办法

    在网上搜索答案,很多都是右键解决方案-> 重定解决方案.但是我的Visual Studio2017没有这个选项. 最后解决方案是打开Visual Studio Installer,下载单个组件 ...

最新文章

  1. oracle多种导入导出数据方法
  2. 强类型DataSet中的DBNull的处理
  3. Node.js:Web模块、文件系统
  4. PngEncoder_CreateInstance Failed writing PNG because unable to find libpng12.so.0
  5. 我背着女朋友,用 Python 偷偷抓取了她的行踪
  6. ejb 2.0 3.0_EJB 3.1全局JNDI访问
  7. 利用MSF批量打RMI漏洞
  8. HDFS概述(6)————用户手册
  9. 用SQL表达内连接和外链接
  10. (转)超越文艺复兴,Two Sigma成为全球量化基金新霸主
  11. (转)高盛:老牌投行新生意,华尔街“谷歌”如何炼成?
  12. java报错stderr_struts2 文件上传路径错误 ERROR [STDERR] java.io.FileNotFoundException:
  13. 系统的性能与压力测试
  14. 小码王python_小码王分享给Python初学者的几个技巧
  15. 数据结构——栈的详解
  16. EEE(Energy Efficient Ethernet)-节能以太网
  17. 计算机学院实验报告,大学计算机实验报告-EXCEL电子表格实验
  18. MySQL数据库程序设计(三)
  19. 光明区支持总部企业高质量发展实施办法(征求意见稿)
  20. 2021 回头看看这一年

热门文章

  1. Matpower建模
  2. c mysql开发工具_Windows平台下Mysql C程序设计
  3. ISO9001:2000标准的主要特点和要求(转载)
  4. 带你认识Oracle索引类型(全面总结)
  5. Ubuntu安装Qt以及配置步骤
  6. 局域网计算机共享加密码,局域网文件共享设置密码的方法
  7. 杨辉三角形JAVA代码
  8. AppCode开发,一个智能开发环境
  9. Java中测试类的使用(用于更加便捷的测试代码)
  10. 在百度上搜不到的资源是在哪找的?就在这些强大的资源搜索网站呀