gpt4 book ai didi

windows - stdio 的 printf 和 Windows 驱动程序

转载 作者:可可西里 更新时间:2023-11-01 11:14:25 28 4
gpt4 key购买 nike

我想在驱动程序代码 (DDK) 中使用“printf”,因此我包含了 stdio.h。但是编译器说:

error LNK2001: unresolved external symbol __imp__printf

有什么想法吗?我在某处看到这是不可能的——但这太糟糕了——我不敢相信。为什么我不能在内核代码中使用标准 C 例程?

  1. 像 printf 这样的 C 函数来自一个静态的 cstd.lib 或什么 AFAIK 不是吗?
  2. 为什么 WDK 会为我提供 stdio.h?

最佳答案

Windows 内核仅支持部分标准 C 运行时。特别是,不支持高级功能(如文件流、控制台 I/O 和网络)。相反,您需要使用 native 内核 API 来实现类似功能。

之所以将 stdio.h 包含在 WDK 中,是因为 C 运行时的某些部分是为了您的方便而提供的。例如,您可以使用 memcmp(尽管 native RtlCompareMemory 是首选)。 Microsoft 没有通过 CRT header 来选择 #ifdef 来排除内核模式下不可用的零碎内容。一旦您积累了一些编写内核驱动程序的经验,您就会掌握内核中可能发生的事情以及可能行不通的事情。

要解决您的高级问题:您可能正在寻找某种调试/日志记录机制。你真的有两个选择:

  1. DbgPrintEx 是最容易使用的。它基本上是 printf 的替代品(尽管在运行 >=DISPATCH_LEVEL 时需要注意某些类型的字符串插入)。输出到调试器,或者,如果你愿意,到 DbgView。 .
  2. WPP是工业强度的选择。最初的学习曲线非常陡峭(尽管 WDK 中有示例)。但是,它非常灵活(例如,您可以创建自己的尖叫声,如 Print("My IP address is: %!IPV4!", ip);),而且速度非常快(Microsoft在大多数 Windows 组件的非调试版本中提供 WPP 跟踪)。

关于windows - stdio 的 printf 和 Windows 驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6300361/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com