如何正确调试 Windows 内核驱动程序?

How to debug a Windows kernel driver properly?

我正在尝试设置 Windows VM 的环境以调试内核驱动程序。

我在Visual Studio2017年创建了一个内核驱动程序的示例。文件->新建项目->内核模式驱动程序基本项目; 仅用于测试 - 自动生成的跟踪宏、所需的过程等)并想在 目标机器 .

上进行测试

有我的步骤(目标机器):

  1. 安装Windows10到虚拟机(VirtualBox);
  2. Turn on Test mode and set BCDEdit as local;
  3. 安装WDK
  4. 下载OSR Loader;
  5. 复制文件到虚拟机(C:\DriverTest\TestKernelDriver2\; .cer, .inf, .pdb, .sys);
  6. 创建 traces 文件夹; C:\DriverTest\TestKernelDriver2\痕迹\
  7. 安装证书 - TestKernelDriver2.sys; (签名模式:测试签名)
  8. 运行 OSR Driver Loader,选择驱动,按Register service (Success).
  9. 运行 tracelog 带参数(GUID 由模板生成;不通过 Tools->Create GUID)- 成功:

    tracelog -start TestKernelDriver2 -guid #0f4fbb98-1569-495b-88d1-f654b1e2d68e -f C:\DriverTest\TestKernelDriver2\traces\trace.etl -flag 2 -level 0xFFFF

  10. 检查C:\DriverTest\TestKernelDriver2\traces\trace.etl; (存在 - 64KB 大小)

  11. OSR 驱动程序加载程序:按启动服务失败)。错误信息:找不到指定的程序。
  12. 停止tracelog - 成功:

    tracelog -stop TestKernelDriver2

  13. 打开 Event ViewerWindows 日志->系统。最后一个错误:

    The TestKernelDriver2 service failed to start due to the following error: The specified procedure could not be found.

    Details: EventData param1 TestKernelDriver2 param2 %%127 54006500730074004B00650072006E0065006C0044007200690076006500720032000000

  14. 通过事件查看器打开C:\DriverTest\TestKernelDriver2\traces\trace.etl,没有看到任何日志。

我怎样才能知道遗漏了什么程序?

我试图通过 Dependency Walker and revealed that some .sys files are missed (WppRecorder.sys, WdfLdr.sys, msrpc.sys, EXT-MS-WIN-###.DLL). These filed are located in C:\Windows\System32\drivers. I copied the files to C:\Windows\System32 and Dependency Walker calmed down. What about EXT-MS-WIN-*.DLL - I read in 调查这些文件可能会丢失。

感谢@magicandre1981。我通过 PnPUtil 安装了我的驱动程序。但是现在,我在 pnputil /enum-drivers 命令的列表中看到它。

但是当我 运行 在 WinDbg 中执行以下命令时,我没有在列表中看到我的驱动程序:

!load wdfkd.dll
!wdfkd.wdfldr

我正在尝试从 this Microsoft ttutoriall.

开始第 1 课的步骤

我通过 tracefmt generator and TraceView 应用程序找到了解决方案。

第0步:通过命令生成tmf文件:

tracefmt С:\TestDriver\TestKernelDriver2\TestKernelDriver2.etl -i С:\TestDriver\TestKernelDriver2\TestKernelDriver2.sys -r С:\TestDriver\TestKernelDriver2\TestKernelDriver2 -p С:\TestDriver\TestKernelDriver2\tmfs -o С:\TestDriver\TestKernelDriver2\TestKernelDriver2.txt -v

步骤 1:在 TraceView 中创建会话: 文件 -> 创建新会话。填写 手动输入的控件 GUID。 (0f4fbb98-1569-495b-88d1-f654b1e2d68e)

步骤 2选择 WPP 格式信息的来源设置 TMF 搜索路径 选项) 和填充路径:C:\DriverTest\TestKernelDriver2\tmfs

步骤 3下一步,填写登录会话名称实时显示 已选中。 完成.