下载:
最后编辑此篇时间是2020年12月22日,书中下载地址已变更,需到微软官网找下载地址,微软官方有详细的
安装步骤和说明,仔细阅读安装成功不会有什么问题。
WDK微软官方下载地址:
https://docs.microsoft.com/zh-cn/windows-hardware/drivers/download-the-wdk
下载遇到的问题:
1、用公司电脑下载的是 Visual Studio 2019 安装程序,但是同样是这个下载地址到家里电脑下载的却是 Visual Studio 2017 ,未找到原因,现把2019版程序保存在CSND,以备以后使用
下载地址:https://download.csdn.net/download/lygl35/13752376
安装:
是需要添加 Spectre
如果不添加编译是会出现如下错误:
Building ‘KmdfHelloWorld’ with toolset ‘WindowsKernelModeDriver10.0’
and the ‘Universal’ target platform.Microsoft Visual
Studio\2019\Community\MSBuild\Microsoft\VC\v160\Microsoft.CppBuild.targets(458,5):
error MSB8040: 此项目需要缓解了 Spectre 漏洞的库。从 Visual Studio
安装程序(单个组件选项卡)为正在使用的任何工具集和体系结构安装它们。了解详细信息: https://aka.ms/Ofhn4c
我安装的所有项目如下图:
新建项目
第一种空项目(一般不用)
第二种(存粹的空项目)
编译
编译遇到的问题:
编译第一个驱动报错处理:
错误提示如下图:
警告 C4100 “driver”: 未引用的形参
警告 C4100 “reg_path”: 未引用的形参
3个解决方法:
方法1:
头部需要添加如下代码
#pragma warning( disable : 4100 )
方法2:
函数内加
UNREFERENCED_PARAMETER(driver);//参数driver 改为未引用的参数
方法3:
修改调试设置:
编译调试设置
编译的目标系统设置:
inf2Cat 签名设置:
存粹的空项目 错误提示:
1297 Device driver does not install on any devices, use primitive driver if this is intended
错误提示:
解决办法:
修改为x64
代码展示
/**********************驱动程序学习例程************************
* 平台:windows10
* 功能:编写第一个驱动程序代码
* 编写:ZGL
* 日期:2020-12-21
* QQ : 55027932
* 更改记录:未更改
******************************************************************/
#include <ntddk.h> //包含所有驱动程序的核心 Windows内核定义
#pragma warning( disable : 4100 ) //避免编译报错,不加会会报"未引用形参的错误"
//提供一个Unload函数值是为了让程序能动态卸载,方便调试
VOID DriverUnload(PDRIVER_OBJECT driver)
{
//UNREFERENCED_PARAMETER(driver);//未引用的参数,避免编译器报错
DbgPrint("first:Our driver is unloading...\r\n");
}
NTSTATUS DriverEntry(PDRIVER_OBJECT driver,PUNICODE_STRING reg_path)
{
//UNREFERENCED_PARAMETER(reg_path);
//这里是内核模块的入口,可以在这里写入我们想写的东西
//打印已经话
DbgPrint("first:Hello,my salary!");
//设置一个卸载函数,便于这个函数退出
driver->DriverUnload = DriverUnload;
return STATUS_SUCCESS;
}
存粹的空项目(文件扩展名 用 .c)
#include <ntddk.h>
VOID DrvUnload(PDRIVER_OBJECT pdriver)
{
DbgPrint("Unload\n");
}
NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path)
{
driver->DriverUnload=DrvUnload;
return 0;
}