Closed timzaak closed 9 months ago
kdnet 设置内核Debug 对网卡有限制。win11 目前VirtualBox、VMware 都无法成功,可能 Hyper-V 可以。
PS: 虚拟机 注意不要登录Microsoft 账号,貌似登录后,无法设置虚拟机为测试环境。 PS2: WDK 版本更新后,虚拟机里的 WDK 貌似会出现问题,即使重装 WDK Test Target Setup x64-x64_en-us.msi 也不行
Eco Kernel Debug 流程 这个流程我这边测试可过。
再将 C:\Program Files (x86)\Windows Kits\10\Remote\x64
下的 WDK Test Target Setup 在虚拟机上安装上,即可通过 Visual Studio 进行远程 DEBUG。 不过debug 效果不是很好,最后转向 TPP 这种疯狂打日志的方式来临时性解决
目前未能找到合适的方案。
Write a Hello World Windows Driver (KMDF) Hello World 第一步。里面涉及相关依赖下载指引。 若是想用 Rust 开发,可以参考这个:windows-kernel-rs ,里面包含了常用的驱动编程思路和流程,Windows API 封装可使用官方提供的库: microsoft/windows-rs 。
开发大致流程
最核心的是:在 Windows-Driver-Samples 里扒相关源码,想办法跑起来,并在 demo 上更改。不建议自建项目,原因是环境依赖配置一大堆,对于接触 Visual Studio 不深的人来讲,简直要命。 另外由于闭源,你也无法从根本上去梳理整个架构,只能看文档怎么说,而往往文档总是存在滞后性和编排不合理性。 开发完毕后,还需要过EV代码签名(3800+)+ 微软认证,否则客户机器上无法使用。 参考: 通过证明对 Windows 10 及更高版本的驱动程序进行签名 - Windows drivers 避坑 | Windows驱动签名经验贴
Debug 流程
C:\Program Files (x86)\Windows Kits\10\Remote\x64
WDK Test Target Setup x64-x64_en-us.msi 复制到虚拟机,并安装。 在 Visual Studio 里的 Configure Devices 用IP添加设备,过程中会重启虚拟机,进入开发模式。 若是为了方便非驱动部分的调试,最好在虚拟机里安装完整的开发环境本地调试,目前 Windows 下的 C/Rust 的远程调试尚未找到好的方法论。生成 TMF 文件(多个),$OUT_PATH 要是空目录。
.\tracepdb.exe -f $PROJECT_PATH\x64\Debug\$DRIVER_NAMME.pdb -p $OUT_PATH 将 OUT_PATH 拷贝到虚拟机,用 TraceView.exe 创建 Log Session,此步骤会用到 Trace.h 里的 TraceControlGUID 和 OUT_PATH 内的 TMF 文件。 注意 TraceView.exe 将 logSession 保存到 workspace 再打开会出问题: Flags 和 Level 会丢失掉,无法跟踪日志。这就导致每次打开 TraceView.exe 都需要重新创建 Log Session,可通过挂起虚拟机来使虚拟机保持状态。另外,每次添加或更改 Trace 代码,都需要重新生成 TMF 文件。
驱动的安装与卸载
我一般使用Visual Studio Debug 来安装,然后 用设备管理器-> 查看->显示隐藏的设备,找到对应的虚拟设备,删除设备并勾选删除驱动来解决。
若有关联的 CommandLine App 用来调试驱动,需要将 App 以 Release 方式 Build,否则 Debug 模式编译出的应用在 虚拟机 上会加载动态dll,导致无法运行(最好在虚拟机内开发,方便debug)。
备注
Driver 与 Device 通过代码安装与卸载
参考 Windows-samples setup/devcon 代码以及 将代码从 SetupApi 移植到 CfgMgr32 - Windows drivers。 完整的讲解参考:Device and Driver Installation - Windows drivers。
Driver 和 用户空间 通信方式
遇到的坑整理
内存
Windows 开发额外资料
DLL的生成、编写、调用总结_终不免俗的博客-CSDN博客_生成dll lib和dll文件的区别和联系_冯相文要加油呀的博客-CSDN博客_dll和lib INF 文件概述 - Windows drivers 不同的 IRP 处理方法 - 速查表 - Windows drivers 【Visual Studio 2019】创建 MFC 桌面程序 ( 安装 MFC 开发组件 | 创建 MFC 应用 | MFC 应用窗口编辑 | 为按钮添加点击事件 | 修改按钮文字 | 打开应用 ) 驱动开发之前,最好搞定最简单的MFC开发,好方便后续调试。 Youtube windows 开发讲解, 目前找到的最好入门资料,但也年代久远,OSR Driver Installer 等工具已不再维护。 Windows-driver-samples : windows 官方 example,写的比较完善,但注释和使用说明少,有很多 demo 最后一次更新都是几年前,需要老一些的 visual studio 搭配特定版本的 SDK 才能跑起来,README 里面关于代码编写流程可以参考。 Accessing device properties - Windows drivers