驱动开发 —— 从零开始(1) 配置vs20xx+wdkxx环境
网上教程很多、如何去安装如何去配置
但是也有些坑感觉并不是那么的完善
wdk+vs下载链接:https://docs.microsoft.com/zh-cn/windows-hardware/drivers/download-the-wdk
只要wdk版本与sdk版本对应就行,不用在意是vs20xx
我这边以vs2017+wdk10+win1909举例子
一、安装环境

其实没必要去安装Windows平台开发
在单个组件中选择 SDK -> Windows 10 SDK(10.0.XXXXX.X) 我这里使用的是Windows 10 SDK(10.0.17763.0)

然后去选择你的WDK版本 我这里对应的是Windows 10 版本 1809 的WDK 那么下载这个就行了
WDK安装包会自动检测你与SDK版本符合不符合 如果不符合安装的时候会有警告提示那么换其他版本就行(手动狗头)
WDK安装完毕自动加载到vs扩展上,若没有加载找到WDK根目录列如:C:\Program Files (x86)\Windows Kits\10\Vsix
手动打开目录下WDK.vsix重新安装扩展即可
二、环境测试
安装完毕后、新建项目

选择一个空项目吧、添加新建项

为了省事直接建的是后辍名C、要不然还得extern “C”
写入代码
#include <ntddk.h> //回调 监视系统进程打印
VOID nothting(HANDLE ppid, HANDLE mypid, BOOLEAN bcreate)
{ DbgPrint("ProcessNotify\n");
}
//卸载函数 VOID DriverUnload(PDRIVER_OBJECT driver)
{
PsSetCreateProcessNotifyRoutine(nothting, TRUE);
DbgPrint("Unload"); } //入口函数 相当于main
NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path)
{
DbgPrint("%wZ\n", reg_path);
driver->DriverUnload = DriverUnload;
PsSetCreateProcessNotifyRoutine(nothting, FALSE);
return ;
}
到现在你还是不可以跑、需要经过一下设置。
三、环境设置
设置C/C++的警告等级

其他的也不用过于设置、到用的时候你自然就会不用的时候设置了也没用。

好了现在就可以跑通了。
四、常见问题
很多朋友可以跑通但是加载驱动的时候会出现错误,这里也把错误都稍微的总结一下吧。
1、驱动禁止加载
如果你在64位跑但是你生成的是32位的驱动版本那指定是不行的

改为64位再生成
2、驱动没有签名
解决办法1、开机F8 最后一项中选择禁用驱动程序签名强制 - > 不推荐 每次开机都要设置一遍
解决办法2、
1.1右键桌面上的“计算机”→“属性”。
1.2选择左边选项卡的“高级系统设置”。
1.3切换到左边的“硬件”选项卡→选择第二个“设备安装设置”。
1.4在弹出来的窗口选择“否”→第三项→“从不安装”→“确定”即可
解决办法3、
管理员打开CMD 输入 bcdedit.exe -set loadoptions DDISABLE_INTEGRITY_CHECKS 回车
一劳永逸、不用每次开机设置
解决办法4、 网上查找一个签名工具列如:亚洲诚信 、找到一个过期的证书、给生成的sys文件签上名即可 -> 推荐
3、警告 MSB8038 已启用 Spectre 缓解,但找不到 Spectre 缓解库。
安装Spectre缓解库、微软官方讲解的很详细,我直接就复制过来了。
WDK 默认启用了 Spectre 缓解,但需要为要开发的每个体系结构将 Spectre 缓解库安装在 Visual Stuido 中。 此外,开发适用于 ARM/ARM64 的驱动程序还需要这些体系结构的生成工具也安装在 Visual Studio 中。 若要查找这些项,需要知道系统上安装的 MSVC 的最新版本。
若要查找系统上安装的最新版 MSVC,请在 Visual Studio 安装程序中转到“工作负荷”页,在右侧窗格的“安装详细信息”下展开“使用 C++ 的桌面开发”,然后找到“MSVC v142 - VS 2019 C++ x64/x86 生成工具(V14.xx)”(请注意,其中的 xx 应该就是可用的最高版本)。
有了此信息 (v14.xx),转到“单个组件”,然后搜索“v14.xx”。 这会返回所有体系结构的工具集,包括 Spectre 缓解库。 选择要为其开发的驱动程序体系结构。
例如,搜索 v14.25 返回以下内容:
| MSVC v142 - VS 2019 C++ ARM build tools (v14.25) |
| MSVC v142 - VS 2019 C++ ARM Spectre-mitigated libs (v14.25) |
| MSVC v142 - VS 2019 C++ ARM64 build tools (v14.25) |
| MSVC v142 - VS 2019 C++ ARM64 Spectre-mitigated libs (v14.25) |
| MSVC v142 - VS 2019 C++ x64/x86 build tools (v14.25) |
| MSVC v142 - VS 2019 C++ x64/x86 Spectre-mitigated libs (v14.25) |
驱动开发 —— 从零开始(1) 配置vs20xx+wdkxx环境的更多相关文章
- usb驱动开发8之配置描述符
前面分析了usb的四大描述符之端点描述符,接口描述符(每一个接口对应一个功能,与之配备相应驱动),下面是看配置描述符还是看设备描述符呢??我们知道,设备大于配置,配置大于接口,接口可以有多种设置. 我 ...
- Linux设备驱动开发环境的搭建(转)
经过两周的摸索,终于对Linux设备驱动开发有了个初步的认识,下面对Linux设备驱动开发环境的搭建做个小结,以方便自己以后查询,同时也能给同道的初学者一点帮助. 刚接触Linux设备驱动时,初学者往 ...
- Android深度探索HAL和驱动开发(卷1) 第一章 Android系统移植和驱动开发
由于Android是基于Linux内核的,因此,Android和其他Linux系统的核心部分差异非常小.然而不同版本的Android使用的Linux内核的版本有细微的差异,所以不同Android驱动可 ...
- visual studio 2010配置驱动开发环境
visual studio 2010 配置驱动开发环境 ** 工具/材料 VS2010.WDK开发包 ** 配置过程 以下将讲述VS2010驱动开发环境的配置过程,至于必要软件的安装过程这里不再赘述 ...
- Windows驱动开发VS2012 DDK/WDK的环境配置
[开发Windows驱动的配置是很必要的,下文将详细介绍VS2012如何配置驱动开发环境] [转载] 以下部分内容是转载博客:http://blog.csdn.net/huangxy10/articl ...
- [内核编程] visual studio 2010配置驱动开发环境
visual studio 2010 配置驱动开发环境 ** 工具/材料 VS2010.WDK开发包 ** 配置过程 以下将讲述VS2010驱动开发环境的配置过程,至于必要软件的安装过程这里不再赘述 ...
- VS2013+WDK8.1 驱动开发环境配置
Windows Driver Kit 是一种完全集成的驱动程序开发工具包,它包含 WinDDK 用于测试 Windows 驱动器的可靠性和稳定性,本次实验使用的是 WDK8.1 驱动开发工具包,该工具 ...
- Win8.1+VS2013+WDK8.1+VirtualBox or VMware 驱动开发环境配置
https://blog.csdn.net/charlessimonyi/article/details/50904956 Win8.1+VS2013+WDK8.1+VirtualBox or VMw ...
- win7+vs2010配置驱动开发环境(问题种种版...)
本来按照这个来做,能跑通helloworld,可是复杂的驱动就会出错....不知道什么原因,后来就直接用命令行来编译的. -------------------------------------- ...
随机推荐
- 如何分析和提高(C/C++)程序的编译速度?
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://www.cnblogs.com/lihuidashen/p/129354 ...
- JavaScript的基础语法及DOM元素和事件
一,JavaScript是什么? 1,JavaScript简称:js,是一种浏览器解释型语言,嵌套在HTML文件中交给浏览器解释执行.主要用来实现网页的动态效果,用户交互及前后端的数据传输等. 2,J ...
- DEDE自增序号 自动增加数字序号 autoindex属性
在DEDE的模板制作过程中经常会需要用到1,2,3,4....这样的排序方式,这个时候就需要用到DEDE自带的自增序号产生函数 1.按顺序从1开始 需要使用到 [field:global runphp ...
- 面试中很值得聊的二叉树遍历方法——Morris遍历
Morri遍历 通过利用空闲指针的方式,来节省空间.时间复杂度O(N),额外空间复杂度O(1).普通的非递归和递归方法的额外空间和树的高度有关,递归的过程涉及到系统压栈,非递归需要自己申请栈空间,都具 ...
- 使用Docker发布blazor wasm
Blazor编译后的文件是静态文件,所以我们只需要一个支持静态页面的web server即可. 根据不同项目,会用不同的容器编排,本文已无网关的情况下为例,一步一步展示如何打包进docker 需求 H ...
- 【Java8新特性】面试官:谈谈Java8中的Stream API有哪些终止操作?
写在前面 如果你出去面试,面试官问了你关于Java8 Stream API的一些问题,比如:Java8中创建Stream流有哪几种方式?(可以参见:<[Java8新特性]面试官问我:Java8中 ...
- [JavaWeb基础] 006.Struts1的配置和简单使用
1.框架简介 采用Struts能开发出基于MVC(Model-View-Controller)设计模式的应用构架,用于快速开发Java Web应用.Struts实现的重点在C(Controller), ...
- C# 根据BackgroundWoker异步模型和ProgressBar控件,自定义进度条控件
前言 程序开发过程中,难免会有的业务逻辑,或者算法之类产生让人能够感知的耗时操作,例如循环中对复杂逻辑处理;获取数据库百万乃至千万级数据;http请求的时候等...... 用户在使用UI操作并不知道程 ...
- 08 . Python3高阶函数之迭代器、装饰器
Python3高阶函数之迭代器.装饰器 列表生成式 推导式就是构建比较有规律的列表,生成器. 孩子,我现在有个需求,看列表[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],我要求你把列表里 ...
- 50个SQL语句(MySQL版) 问题一
--------------------------表结构-------------------------- student(StuId,StuName,StuAge,StuSex) 学生表 tea ...