【问题标题】:DebugView doesn't capture KdPrint outputDebugView 不捕获 KdPrint 输出
【发布时间】:2020-11-25 02:29:04
【问题描述】:
我无法让 DbgView.exe 在我的 Windows 10 64 位 v2004 虚拟机上正常工作。如果使用 KdPrint,该程序不会从驱动程序中捕获任何内核消息,但使用 DbgPrint 可以正常工作。我已经尝试过“bcdedit /debug on”,在注册表编辑器上添加“调试打印过滤器”并重新启动,启用详细的内核输出。
我也试过在我的主机上,同样的结果。
是一个很简单的驱动,只能装卸,抄自Windows Kernel Programming一书。
这行得通
DbgPrint("Driver initialized.\n");
这不是
KdPrint(("Driver initialized.\n"));
任何帮助将不胜感激!
【问题讨论】:
标签:
windows
windows-10
kernel
driver
【解决方案1】:
跳转到KdPrint,你会看到一个预处理魔法:
#if DBG
#define KdPrint(_x_) DbgPrint _x_
#define KdPrintEx(_x_) DbgPrintEx _x_
#define vKdPrintEx(_x_) vDbgPrintEx _x_
#define vKdPrintExWithPrefix(_x_) vDbgPrintExWithPrefix _x_
#define KdBreakPoint() DbgBreakPoint()
#define KdBreakPointWithStatus(s) DbgBreakPointWithStatus(s)
#else
#define KdPrint(_x_)
#define KdPrintEx(_x_)
#define vKdPrintEx(_x_)
#define vKdPrintExWithPrefix(_x_)
#define KdBreakPoint()
#define KdBreakPointWithStatus(s)
#endif // DBG wudfwdm
这意味着如果您使用 Release 配置进行编译(DBG 宏将不会被定义),KdPrint 将不会发生任何事情。
所以这不是 DbgView 的问题。
【解决方案2】:
即使使用调试编译的驱动程序,winPE (dbgview64.exe) 上的 dbgView 4.90 也不会打印 KdPrint,除非您同时单击 Capture、Capture Kernel 和 Capture、Enable Verbose Kernel Output。