文章目录

  • 前言
  • 编译环境-WDK的安装
  • 搭建测试驱动的虚拟机
    • win11虚拟机
    • win10虚拟机
  • 在测试机器上运行驱动
  • 修改注册表-显示调试信息
  • 上面驱动代码含义
  • 测试证书签名
  • 其他
    • 旧版本的visual studio community下载
    • SC加载驱动
    • windbg

前言

参考:windows驱动开发环境搭建以及helloworld | qwertwwwe、[已解决]DebugView无法获取到KDprintEx的信息

搭建驱动环境–编写hello驱动–安装测试虚拟机–安装驱动


编译环境-WDK的安装

挺难搞。最开始,我使用的时vs2022,搞半天也没把编译环境搭起来。

没办法,降到vs2019。

SDK使用的时10.0.19041.0。

到官网下载和SDK版本相近的WDK: 以前的 WDK 版本和其他下载 - Windows drivers | Microsoft Learn

之后,我们参考windows驱动开发环境搭建以及helloworld | qwertwwwe, 创建一个KMDF项目,编译下面代码,看能否编译通过。

// come from: https://github.com/dybb8999/Windows-kernel-security-and-driver-development-CD/blob/master/source/first/first.c #include <ntddk.h>VOID DriverUnload(PDRIVER_OBJECT driver)
{DbgPrint("first: Our driver is unloading…\r\n");
}NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path)
{DbgPrint("first: Hello, my salary!");driver->DriverUnload = DriverUnload;return STATUS_SUCCESS;
}


搭建测试驱动的虚拟机

win11虚拟机

使用virtualbox,搭建win11虚拟机,是要踩坑的。可见:如何在VirtualBox 7.0开启TPM和EFI安全启动以在虚拟机中安装或升级到Windows 11 – Orz小窍门

之后,需要关闭签名验证,win11上,我目前只找到这一种有效的方法:Win11怎么禁用驱动程序强制签名? 关闭Win11驱动强制签名的技巧_windows11_Windows系列_操作系统_脚本之家

设置-恢复-高级启动-选择疑难解答-高级选项-启动设置-按键盘上的 F7 ,就可以禁用驱动程序强制签名了。

(在virtualbox win11中 bios,没有serurity boot选项。)

win10虚拟机

win10虚拟机常规安装即可。

驱动需要签名之后,才能加载。日常开发,需要禁用使用测试签名代码,可以参考:加载测试签名代码 - Windows drivers | Microsoft Learn、windows10 该值受安全引导策略保护,无法进行修改或删除。禁用驱动程序强制签名_wangan094的博客-CSDN博客

# admin打开powershell,执行下面语句
bcdedit /set testsigning on

执行上面语句之后,需要重启。重启之后,可以看到这样的水印。


上面这样改过。可以启动测试签名的驱动。驱动如果没有使用测试签名,还是启动不了。所以我们下面这样“禁用驱动程序强制签名”


在测试机器上运行驱动

我们需要点辅助工具。

  • 加载驱动的工具:InstDrv,可以在这里下载,[原创]驱动加载工具(InstDrv - V1.2中文版)

  • 监视本地系统上的调试输出:DebugView,可以在这里下载, DebugView - Sysinternals | Microsoft Learn

我并没有看到输出,应该是和输出信息的level有关,暂时不管它:windows - DebugView doesn't capture KdPrint output - Stack Overflow、驱动中打印消息以及过滤机制_一如当初的博客-CSDN博客、[原]你知道怎么使用DebugView查看内核调试信息吗? - BCN - 博客园

虽然信息没打印,但是驱动确实被安装了,我们可以使用driverquery /v | findstr xxx看到输出信息。


修改注册表-显示调试信息

我们修改下面的注册表项。

Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager/Debug Print Filter]
DEFAULT=dword:0000000f


此时,我们再按照上一节的过程,安装驱动,并启动。(只有启动后才能看到输出)


上面驱动代码含义

上面的驱动代码很短,主要是用来验证环境的安装情况。我们简单的过一遍。

ntddk.h是一个内核(接口)头文件。驱动程序都需要需要特定的例程。

DriverEntry是在加载驱动程序后调用的第一个例程,负责初始化驱动程序。DriverUnload执行在系统卸载驱动程序之前所需的任何操作。

dbgPrint向内核调试器发送消息。


测试证书签名

在上面安装虚拟机的小节,我们在启动的时候禁用了驱动的签名验证。但是,这个设置,在下次重启的时候会失效,导致驱动启动失败,而每次设置又比较麻烦。

所以,我们给驱动进行签名。(这里不赘述签名等概念,因为我之前整理过:密码学简述)

PS: 虚拟机还是需要执行下面命令,并重启。

bcdedit /set testsigning on

参考:Windows驱动开发–测试证书签名、测试签名 - windows文档、makecert.exe missing in windows 10, how to get it and use it、windows下查看系统证书、SignTool.exe(签名工具)

# 生成证书
> MakeCert –r –pe –ss PrivateCertStore –n CN=www.da1234cao.tk rg.cer# 将证书添加到本地(以信任)
> CertMgr -add rg.cer -s -r localMachine root
CertMgr Succeeded# 给驱动签名
> Signtool sign /v /s PrivateCertStore /n www.da1234cao.tk /t http://timestamp.digicert.com  xxx\driver-logfile.sys
The following certificate was selected:Issued to: www.da1234cao.tkIssued by: www.da1234cao.tkExpires:   Sun Jan 01 07:59:59 2040SHA1 hash: FB2249F73FE587DFB619E58319D5D3D8C89D39CFDone Adding Additional Store
Successfully signed: xxx\driver-logfile.sysNumber of files successfully Signed: 1
Number of warnings: 0
Number of errors: 0

这个过程,我不知道咋脚本化。每次使用VS生成驱动后,还得手动签名,有点麻烦。VS屏蔽编译链接过程,非常让人讨厌。


其他

旧版本的visual studio community下载

如果,因为一些原因,我们想下载旧版本的visiual studio,到官网我们会发现,不再提供旧版本的Community版本:Visual Studio 较旧的下载 - 2019、2017、2015 和以前的版本

我们可以找见这个答案:How to download Visual Studio Community Edition 2015 (not 2017) - Stack Overflow

这个答案,我回答不了。目前一个比较好的去出,是在wdk界面下载旧版本的Community:以前的 WDK 版本和其他下载 - Windows drivers | Microsoft Learn


SC加载驱动

其实,图形化的加载驱动工具并不好找,在网上。我们可以使用windows系统提供的命令来加载驱动:使用Windows 自带的 sc 工具操作驱动程序、sc.exe创建

# 好像不大好使
sc.exe create test type=kernel start=demand binpath=C:\Users\dacao\Desktop\driver-logfile.sys
sc.exe start test
sc.exe stop test
sc.exe delete test

windbg

不太好搞定。

使用 windbg + virtualbox 搭建双机内核调试环境

windows驱动开发环境搭建以及helloworld相关推荐

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

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

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

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

  3. windows10 驱动开发环境搭建vs2019 helloworld

    因为特殊原因需要搭建win10驱动环境, 因此学习了一下 但是发现win10环境特别麻烦 vs2022已经出来了,但是没看到驱动支持, 因此还是选择vs2019 提前准备 1 查看系统版本 2 下载v ...

  4. windows驱动开发——环境搭建

    1.安装工具 WinDBG            http://www.microsoft.com/whdc/devtools/debugging/installx86.Mspx dbgView   ...

  5. Windows Server 2012 +WDK7600.16385.1+VS2008驱动开发环境搭建

    这个配置相较与Windows Server 2012 +WDK7600.16385.1+VS2010驱动开发环境搭建 要简单的多,不需要每次创建驱动工程时配置这么多的参数 下载WDK开发安装包,我已经 ...

  6. Windows Server 2012 +WDK7600.16385.1+VS2010驱动开发环境搭建

    本帖通过Augusdi的一篇博文进行重新总结 第一步:安装Visual stdio 2010 1.安装VS2010 第二步:安装WDK安装包 2.安装WindowsDriverKit7-GRMWDK_ ...

  7. 配置windows驱动开发环境

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

  8. ESP32开发 0.windows Vscode开发环境搭建,基于esp-idf-V4.2 | Cmake | Vscode插件

    一 前言 入坑嵌入式以来,一直都在寻找一款通用MCU控制器:他应有优秀的计算处理能力.丰富的外设扩展能力.支持有线/无线联网.小巧的封装.自从ESP8266爆火以来,熟悉过它的使用,但窘于硬件限制,只 ...

  9. vs2010 wdk c语言,Windows7+WDK+VS2010+VisualDDK驱动开发环境搭建.doc

    Windows7+WDK+VS2010+VisualDDK驱动开发环境搭建.doc [置顶]Windows7+WDK+VS2010+VisualDDK驱动开发环境搭建(菜鸟的经验) 分类: 驱动开发 ...

最新文章

  1. web集群时session同步的3种方法
  2. iOS视图控制器之间delegate传值
  3. 各种门锁的内部结构图_双核CUP,电镀真金把手,0.3秒开锁,欧瑞博智能门锁S2评测...
  4. Bootstrap Paginator分页插件+ajax
  5. html语言对齐是什么意思,html – 对齐RTL语言的元素
  6. liunx之Centos6.8杀毒软件的安装
  7. JAVA入门级教学之(构造方法)
  8. vscode常用快捷键大全
  9. python 爬取豆瓣top100电影页面
  10. 老师必备的数学几何绘图软件,赶紧收藏!
  11. PPT自学教程从小白到高手超详细讲解_1
  12. python识图找图_初探利用Python进行图文识别(OCR)
  13. 【web】百度地图中心点始终出现在左上角,或者灰蒙蒙的
  14. OpenCV读取、保存视频
  15. 【Arduino学习】01.开发板选择和环境的搭建
  16. s32k118CAN通信问题
  17. 域组策略开启RDP远程桌面功能
  18. 如何成为一个程序员高手
  19. uni 阻止按钮多次点击 按钮多次点击
  20. Windows XP系统加速、减肥、安全

热门文章

  1. 中国人越来越不愿买新车!二手车电商上半年融资150亿元,谁是大赢家?
  2. android studio manifest merger failed,android studio 引用第三方工程Manifest merger failed
  3. element 表格+分页封装
  4. AI产品--苹果的Face ID
  5. 使用Logstash接收Netflow日志并发送到syslog服务器
  6. 清华集训2014 玛里苟斯
  7. 标签体系-内容建设思路
  8. C#流程控制————分支结构
  9. 常见运维面试题及答案【个人收集】
  10. ec200t 拨号_Quectel EC200T驱动以及ppp拨号移植