如何正确调试 Windows 内核驱动程序?
How to debug a Windows kernel driver properly?
我正在尝试设置 Windows VM 的环境以调试内核驱动程序。
我在Visual Studio2017年创建了一个内核驱动程序的示例。文件->新建项目->内核模式驱动程序(基本项目; 仅用于测试 - 自动生成的跟踪宏、所需的过程等)并想在 目标机器 .
上进行测试
有我的步骤(目标机器):
- 安装Windows10到虚拟机(VirtualBox);
- Turn on Test mode and set BCDEdit as local;
- 安装WDK;
- 下载OSR Loader;
- 复制文件到虚拟机(C:\DriverTest\TestKernelDriver2\; .cer, .inf, .pdb, .sys);
- 创建 traces 文件夹; C:\DriverTest\TestKernelDriver2\痕迹\
- 安装证书 - TestKernelDriver2.sys; (签名模式:测试签名)
- 运行 OSR Driver Loader,选择驱动,按Register service (Success).
运行 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
检查C:\DriverTest\TestKernelDriver2\traces\trace.etl; (存在 - 64KB 大小)
- OSR 驱动程序加载程序:按启动服务(失败)。错误信息:找不到指定的程序。
停止tracelog - 成功:
tracelog -stop TestKernelDriver2
打开 Event Viewer。 Windows 日志->系统。最后一个错误:
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
- 通过事件查看器打开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:下一步,填写登录会话名称和实时显示 已选中。 完成.
我正在尝试设置 Windows VM 的环境以调试内核驱动程序。
我在Visual Studio2017年创建了一个内核驱动程序的示例。文件->新建项目->内核模式驱动程序(基本项目; 仅用于测试 - 自动生成的跟踪宏、所需的过程等)并想在 目标机器 .
上进行测试有我的步骤(目标机器):
- 安装Windows10到虚拟机(VirtualBox);
- Turn on Test mode and set BCDEdit as local;
- 安装WDK;
- 下载OSR Loader;
- 复制文件到虚拟机(C:\DriverTest\TestKernelDriver2\; .cer, .inf, .pdb, .sys);
- 创建 traces 文件夹; C:\DriverTest\TestKernelDriver2\痕迹\
- 安装证书 - TestKernelDriver2.sys; (签名模式:测试签名)
- 运行 OSR Driver Loader,选择驱动,按Register service (Success).
运行 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
检查C:\DriverTest\TestKernelDriver2\traces\trace.etl; (存在 - 64KB 大小)
- OSR 驱动程序加载程序:按启动服务(失败)。错误信息:找不到指定的程序。
停止tracelog - 成功:
tracelog -stop TestKernelDriver2
打开 Event Viewer。 Windows 日志->系统。最后一个错误:
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
- 通过事件查看器打开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:下一步,填写登录会话名称和实时显示 已选中。 完成.