开发环境

Windows Version: 2004 (19041.264)
WDK Version: 10.0.19041.1
SDK Version: 10.0.19041.1
Visual Studio: Community 2019

测试环境

Windows 7 SP1 + KMD Manager + DbgView

开发环境搭建

参照:https://docs.microsoft.com/zh-cn/windows-hardware/drivers/download-the-wdk

除了在安装VS2019的时候,选择C++桌面开发环境,里面自带一个和当前系统版本一致的SDK,也可以自己修改,但是可能会和系统不兼容。

还需要安装的组件:

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)

v14.25根据在所有组件里看到最新版本的为准,做一下适当调整。

然后下载适用2004WDK安装文件,双击之后,需要联网下载安装WDK相关文件和VS2019驱动开发插件,根据提示点过去就可以。

测试环境

启动的时候,需要按f8关闭驱动签名验证,也可以参考这篇文章添加一个关闭驱动签名检查的启动项。

KMD Mananger工具用来管理内核驱动服务(注册、启动、停止、卸载),DbgView用来查看驱动打印信息,这两个工具都需要管理员权限运行

新建HelloWorld项目

新建一个以Kernel Mode Driver, Empty(KMDF)为模板的驱动项目,项目名称HelloDriver,在项目中新建一个hello.c文件作为驱动入口文件,写一点简单的代码做测试:

///
/// @file hello.c
/// @author REInject
/// @date 2020-05-31
///#include <ntddk.h>// 提供一个Unload 函数只是为了让这个程序能够动态卸载,方便调试
VOID DriverUnload(PDRIVER_OBJECT driver)
{// 但是实际上我们什么都不做,只打印一句话DbgPrint("hello: Our driver is unloading...\r\n");
}// DriverEntry,入口函数。相当于main。
NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path)
{// 这是内核模块入口,可以在这里写入我们想写的东西DbgPrint("hello: my salary!");// 设置一个卸载函数,便于这个函数退出driver->DriverUnload = DriverUnload;return STATUS_SUCCESS;
}

这时候如果直接运行,默认生成的驱动文件是Win10平台的,而且基本上会编译失败,需要改一些配置信息(Debug-x64):

  • 调整属性 - C/C++ - 常规,警告等级 4,将警告视为错误 
  • 链接器 - 常规,警告视为错误 否;
  • Driver Settings - GeneralTarget OS Version改成Windows 7Target Platform改为Desktop
  • Stampinf里所有  的地方改成 
  • Inf2Cat里所有  的地方改成 
  • Driver Signing - General中的Sign Mode改为 Off

改好后,使用Debug-x64配置,Ctrl-B生成驱动文件,如果报下面这个错误的话:

error 1297: Device driver does not install on any devices, use primitive driver if this is intended.

根据官网的描述,如果创建的驱动不是基于设备的,即通用型内核驱动,则需要删或者改一些东西,如果可以看懂怎么改就直接改就可以,例如:

原始inf中要改的部分:

复制代码

[Manufacturer]
%ManufacturerName%=Standard,NT$ARCH$[Standard.NT$ARCH$]
%HelloDriver.DeviceDesc%=HelloDriver_Device, Root\HelloDriver ; TODO: edit hw-id[HelloDriver_Device.NT]
CopyFiles=Drivers_Dir[Drivers_Dir]
HelloDriver.sys;-------------- Service installation
[HelloDriver_Device.NT.Services]
AddService = HelloDriver,%SPSVCINST_ASSOCSERVICE%, HelloDriver_Service_Inst

改成:

[DefaultInstall.NT$ARCH$]
CopyFiles=Drivers_Dir[Drivers_Dir]
HelloDirver.sys;-------------- Service installation
[DefaultInstall.NT$ARCH$.Services]
AddService = HelloDriver,%SPSVCINST_ASSOCSERVICE%, HelloDriver_Service_Inst

或者看不懂的,直接删了这个Inf文件就可以了,这个文件暂时用不到。

重新编译之后,会在x64/debug目录下生成HelloDriver.sys驱动文件。

驱动安装测试

打开win7,使用KMD Manager工具进行注册启动停止卸载服务,发现有出现Error Number not found的错误,通过一些测试发现是驱动签名检查没有完全禁用,根据官网给出的信息,nointegrity参数在win7上是无效的:

nointegritychecks [ on | off ] Disables integrity checks. Cannot be set when secure boot is enabled. This value is ignored by Windows 7 and Windows 8.

每次开机手动f8或者使用测试签名,这样就正常了:也可以将虚拟机设置为内核测试模式,这样就不会检查签名。

大功告成,我们已经迈出了第一步。

Windows驱动开发(1)HelloWorld环境搭建相关推荐

  1. Windows驱动开发入门 -- HelloWorld

    一.驱动开发环境搭建 在Download the Windows Driver Kit (WDK)页面中下载最新版本的Visual Studio和WDK进行安装.如果要下载老版本可以到Other WD ...

  2. [LINUX]LINUX驱动开发最简环境搭建(适用于新手)

    LINUX驱动开发环境搭建 一. 前言 二.系统环境 Ubuntu VMWare{非必选} 三.开发环境搭建 1.用于简单学习(Header) 2.用于复杂驱动开发(源码树) a. 基本包 b. 内核 ...

  3. windows驱动开发环境搭建以及helloworld

    文章目录 前言 编译环境-WDK的安装 搭建测试驱动的虚拟机 win11虚拟机 win10虚拟机 在测试机器上运行驱动 修改注册表-显示调试信息 上面驱动代码含义 测试证书签名 其他 旧版本的visu ...

  4. Windows编程—Windows驱动开发环境搭建

    文章目录 前言 步骤 步骤一 步骤二 步骤三 连接测试 步骤四 步骤五 总结 前言 作为一个编写Windows程序的开发人员,对Windows驱动开发 并非必需要掌握,但是掌握 Windows驱动开发 ...

  5. Windows驱动开发环境搭建:VS2013+WDK8.1

    你的Windows驱动开发环境之所以搭建不成功,是因为你没有看这篇博客 1.安装包准备 Visio Studio2013: https://pan.baidu.com/s/1P77yeSKuE7mWl ...

  6. 配置windows驱动开发环境

    配置windows驱动开发环境                    撰写:jiftle 时间:2011-09-09 14:30                     windows驱动开发需要wd ...

  7. Windows驱动开发学习笔记(一)—— 环境配置第一个驱动程序

    Windows驱动开发学习笔记(一)-- 环境配置&第一个驱动程序 环境配置 第一个驱动程序 环境配置 安装VS2010:https://pan.baidu.com/s/1uZWWxCtB60 ...

  8. VS2019 windows驱动开发环境配置

    配置Windows驱动开发环境 VS2019 下载VS2019 下载链接 https://visualstudio.microsoft.com/zh-hans/downloads/ 选择你所需要的开发 ...

  9. windows驱动开发3:第一个驱动及调试

    一.创建项目 新建一个以Kernel Mode Driver, Empty(KMDF)为模板的驱动项目,项目名称HelloDriver,在项目中新建一个hello.cpp文件作为驱动入口文件,写一点简 ...

  10. windows驱动开发-WDF编程

    文章目录 前言 WDF编程前的准备工作 WDF编程 创建驱动对象 创建设备对象 设备对象的回调函数 链表操作 驱动的测试代码 其他 前言 注:本文的完整代码见仓库 18-WDF-reflect 代码参 ...

最新文章

  1. CTO 写的低级 Bug 再致网站被黑,CEO 的号都被盗了!
  2. Android 哥哥福利
  3. 9.3 图像变换(尺寸变换、旋转变换、灰度变换和数据类型变换)
  4. 成功解决TypeError: sequence item 0: expected str instance, bytes found
  5. 我的KT库之----数据对象
  6. 信息学奥赛一本通 2069:【例2.12】糖果游戏
  7. 某一年某一年_一年关于开放组织的对话
  8. Python--Json数据简单解析(11.18)
  9. MySQL的常用SQL脚本
  10. Oracle外键级联删除和级联更新
  11. MySQL远程连接ERROR 2003 (HY000) Cant connect to MySQL server on (10060)
  12. LinkedList 链表总结
  13. 有哪些不讲武德的国外计算机学习资源?
  14. 程序运行时被用户删除了工作目录后崩溃
  15. ArrayList LinkedList
  16. java大嘴鱼游戏代码_Java小游戏吃豆豆源代码
  17. 无法从服务器获取视频文件,视频从云服务器获取视频文件
  18. 浩方 VS 真三国无双 全图
  19. 那些年常见的前端bug (持续更新)
  20. 关于CC的完全非线性椭圆方程一书的一些小结

热门文章

  1. linux 的软连接创建删除
  2. 表单序列化之后再增加参数
  3. Python-Django毕业设计驾校预约系统小程序(程序+Lw)
  4. 安装.NET Framework进度条卡住不动的解决方案
  5. iPhone12创建个人热点
  6. 鸿蒙系统电视k歌,华为电视怎么k歌?全网最详细的教程在这里
  7. 服务器如何在网上设置共享文件,服务器Linux系统设置共享文件夹方法!
  8. 2、js常用内置对象
  9. CAD标注:折弯标注的使用技巧
  10. model.addattribute作用及用法