前言

参考: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 Learnwindows10 该值受安全引导策略保护,无法进行修改或删除。禁用驱动程序强制签名_wangan094的博客-CSDN博客

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

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

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


在测试机器上运行驱动

我们需要点辅助工具。

我并没有看到输出,应该是和输出信息的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 itwindows下查看系统证书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.tk
    Issued by: www.da1234cao.tk
    Expires:   Sun Jan 01 07:59:59 2040
    SHA1 hash: FB2249F73FE587DFB619E58319D5D3D8C89D39CF

Done Adding Additional Store
Successfully signed: xxx\driver-logfile.sys

Number 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 搭建双机内核调试环境

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐