开发环境

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. 《R语言实战》读书笔记--第一章 R语言介绍
  2. MATLAB读取二进制文件------fread
  3. 前端学习(3068):vue+element今日头条管理-上午总结
  4. C 远程登录linux,远程登录Linux主机进行C编程的操作方法简述.doc
  5. 从Google搜索联想到了jQuery
  6. mysql:赋予用户权限、查看及修改端口号
  7. Office Web Apps开放测试
  8. poj2914无向图的最小割
  9. mysql正则时间格式_用正则表达式校验时间格式的正确性
  10. 返利网app android版
  11. 基于MES的生产车间管理信息系统
  12. 浅谈加密算法 aes
  13. 实时计算与SparkSteaming的对比
  14. 郑州财经学院第54次全国计算机,郑州财经学院第二期教师博士班开班
  15. 解决【无法对套接字执行操作,因为系统缺少足够的缓冲区空间,或者因为系统上的队列已满127.0.0.1:8086】问题
  16. 遗传算法GA算法思路及其C++实现
  17. 【设计模式】一:六大基本原则详解
  18. c语言程序0xc0000005解决方案,C语言调试时出现”Unhandled exception 0xC0000005;Access Violation“,是怎么回事呢?...
  19. 关于vue3中无config文件
  20. oppo k7x和oppo k7哪个好 oppo k7x和oppo k7参数对比

热门文章

  1. kindle外源文件封面图片修复方法
  2. 敏捷项目管理之Scrum教练篇
  3. Windows10在PowerShell中启动Redis
  4. 【云原生 | 从零开始学istio】五、istio灰度发布以及核心资源
  5. WF4.0 基础篇 (二十六) Interop调用WF3.X的Activity
  6. sess.run(tf.global_variables_initializer()) 做了什么
  7. 【蓝桥杯C++练习】每日一练03-编程题
  8. 华为p40配置鸿蒙系统,华为P40系列配置汇总:IMX700五摄+首发鸿蒙OS?
  9. 12N60-ASEMI高压MOS管12N60
  10. 进来教你如何解决端口被占用问题