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

标签 c windows visual-studio debugging kernel

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

我在 Visual Studio 2017 中创建了一个内核驱动程序示例。文件->新建项目->内核模式驱动程序(基本项目;仅用于测试 - 自动生成的跟踪宏、所需程序等)并希望在目标机器上对其进行测试。

这是我的步骤(目标机器):

  1. 将 Windows 10 安装到虚拟机 (VirtualBox);
  2. Turn on Test mode并设置 BCDEdit as local ;
  3. 安装 WDK ;
  4. 下载OSR Loader ;
  5. 将构建后的文件复制到 VM (C:\DriverTest\TestKernelDriver2\; .cer, .inf, .pdb, .sys);
  6. 创建traces文件夹; C:\DriverTest\TestKernelDriver2\traces\
  7. 安装证书 - TestKernelDriver2.sys; (签名模式:测试签名)
  8. 运行OSR Driver Loader,选择驱动程序,按注册服务(成功)。
  9. 运行 tracelog使用参数(GUID 由模板生成;不通过工具->创建 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 Driver Loader:按启动服务(失败)。错误信息:找不到指定的程序。
  12. 停止tracelog - 成功:

    tracelog -stop TestKernelDriver2

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

    由于以下错误,TestKernelDriver2 服务启动失败: 找不到指定的过程。

    详细信息: 事件数据 param1 TestKernelDriver2 参数 2 %%127 54006500730074004B00650072006E0065006C0044007200690076006500720032000000

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

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

我试图通过 Dependency Walker 调查它并显示丢失了一些 .sys 文件(WppRecorder.sysWdfLdr.sysmsrpc.sysEXT-MS-WIN-###.DLL)。这些文件位于 C:\Windows\System32\drivers。我将文件复制到 C:\Windows\System32 并且 Dependency Walker 平静下来。 EXT-MS-WIN-*.DLL 怎么样 - 我读到 this topic这些文件可能会丢失。

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

enter image description here

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

!load wdfkd.dll
!wdfkd.wdfldr

enter image description here

我正在尝试从 this Microsoft ttutoriall 开始 session 1 的步骤.

最佳答案

我通过 tracefmt 找到了解决方案发电机和 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 中创建 session : 文件 -> 创建新 session 。填写手动输入的控件 GUID。 (0f4fbb98-1569-495b-88d1-f654b1e2d68e)

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

第 3 步:下一步,填写Log Session Name 并勾选Real-Time Display完成

TraceView settings

关于c - 如何正确调试 Windows 内核驱动程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54787115/

相关文章:

c++ - 安装快板 C++

visual-studio - 如何在 Visual Studio for Mac 中显示隐藏文件?

c - 如何在 C 语言中对文件运行凯撒密码

python - 在 Windows 中使用 Protocol Buffer

windows - 如何在 Mac 上运行 Jmeter 窗口脚本

angularjs - Visual Studio HTML 文件中的 Angular Syntax Highlighter

C程序-输出中的特殊字符

c - 嵌入式编程,等待12.5 us

C stderr 到一个文件

windows - Windows 7 上的 StartServiceCtrlDispatcher 访问被拒绝