【问题标题】:using fprintf in windows kernel device driver在 Windows 内核设备驱动程序中使用 fprintf
【发布时间】:2016-12-10 08:31:47
【问题描述】:

我需要在 Windows 驱动程序的文件中转储某些结构。所以对于文件指针,我使用了 void 指针,并用它来代替 fprintf 中的文件指针。

源代码也成功构建,没有任何编译错误。但是当我加载驱动程序时,存储在该指针上的值没有打印出来。

我应该如何在 Windows 驱动程序中使用 fprintf。

【问题讨论】:

  • 不要在设备驱动程序中使用 C I/O 函数,而是使用 Windows API。 CRT 的标准功能可能会发生锁定和其他可能中断或锁定甚至崩溃您的驱动程序的事情。
  • @JoachimPileborg:您还希望避免在驱动程序中使用 Windows API,因为名字对象通常指的是用户模式组件。它仅用于用户模式代码。只能使用 NT DDK(或 WDK,最近称为)中定义的内核模式 API。

标签: c++ c windows file driver


【解决方案1】:

您应该在设备驱动程序中使用DbgPrintEx

printf 在内核模式下无法为您工作。

DbgPrintEx 打印到内核的 D​​bgPrint 缓冲区,可以使用 WinDbg 或 Kd 等内核调试器进行查看,或者,如果您想在本地系统上查看,DebugView

默认情况下,您打印到此缓冲区的大部分消息都会被过滤掉,因此您需要调整过滤,如MSDN中所述

【讨论】:

  • 附带说明,您(显然)需要一个内核调试器 (Windbg ; Kd) 或像 sysinternals DebugView 这样的工具来查看调用 DbgPrint[Ex] 函数的结果输出。
猜你喜欢
  • 1970-01-01
  • 2017-03-02
  • 2017-10-06
  • 1970-01-01
  • 1970-01-01
  • 2017-12-13
  • 2018-05-23
  • 2013-08-22
  • 1970-01-01
相关资源
最近更新 更多