驱动开发 —— 从零开始(1) 配置vs20xx+wdkxx+winX环境并附录常见问题解决方式

网上教程很多、如何去安装如何去配置

但是也有些坑感觉并不是那么的完善

wdk+vs下载链接://docs.microsoft.com/zh-cn/windows-hardware/drivers/download-the-wdk

只要wdk版本与sdk版本对应就行,不用在意是vs20xx

我这边以vs2017+wdk10+win1909举例子

一、安装环境

在单个组件中选择 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”

写入代码

 1 #include <ntddk.h>
 2 
 3 //回调 监视系统进程打印
 4 VOID nothting(HANDLE  ppid, HANDLE mypid, BOOLEAN  bcreate)
 5 {
 6 
 7     DbgPrint("ProcessNotify\n");
 8 }
 9 //卸载函数 
10 
11 VOID DriverUnload(PDRIVER_OBJECT driver)
12 {
13     PsSetCreateProcessNotifyRoutine(nothting, TRUE);
14     DbgPrint("Unload");
15 
16 }
17 
18 
19 //入口函数 相当于main
20 NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path)
21 {
22     DbgPrint("%wZ\n", reg_path);
23     driver->DriverUnload = DriverUnload;
24     PsSetCreateProcessNotifyRoutine(nothting, FALSE);
25     return 0;
26 }

到现在你还是不可以跑、需要经过一下设置。

三、环境设置

设置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)