KdPrintEx 宏 (wdm.h)
如果满足指定的条件, KdPrintEx 宏会将字符串发送到内核调试器。
调用 KdPrintEx 需要双括号。
语法
void KdPrintEx(
_x_
);
参数
_x_
指定格式字符串的参数,如 printf 中所示。
返回值
无
备注
KdPrintEx 与为调试配置编译的代码中的 DbgPrintEx 例程相同。 此例程在为发布版本编译的代码中不起作用。 只有内核模式驱动程序可以调用 KdPrintEx 例程。
Windows 驱动程序工具包 (WDK) 8 和 WDK 7 适当管理 DBG 预处理器常量定义,以便调试 (检查) 和发布 (免费) 版本。 有关详细信息,请参阅 条件编译和生成环境。
KdPrintEx 要么将指定的字符串传递给内核调试器,要么不执行任何操作,具体取决于 ComponentId、 Level 和相应的组件筛选器掩码的值。 有关详细信息,请参阅 读取和筛选调试消息。
除非绝对必要,否则不应从用户输入或其他进程获取字符串并将其传递给 KdPrintEx。 如果确实使用了未创建的字符串,则必须验证这是有效的格式字符串,并且格式代码与类型和数量的参数列表匹配。 最佳编码做法是,所有 格式 字符串都是静态的,并在编译时定义。
格式字符串的大小或参数数没有上限。 但是,对 KdPrintEx 的任何单个调用都只会传输 512 字节的信息。 DbgPrint 缓冲区的大小也有限制。 有关详细信息 ,请参阅 DbgPrint 缓冲区和调试器 。
此例程在 ntddk.h 和 ndis.h 中定义;组件筛选器 ID 在 dpfilter.h、ndis.h 和 wdm.h 中定义。 包括 ntddk.h 或 ndis.h。
下面是参数:
ComponentId [in]
指定调用此例程的组件。 这必须是 dpfilter.h 头文件中定义的组件名称筛选器 ID 之一。 若要避免将驱动程序的输出与 Windows 组件的输出混合,应仅对 ComponentId 使用以下值:
DPFLTR_IHVVIDEO_ID
DPFLTR_IHVAUDIO_ID
DPFLTR_IHVNETWORK_ID
DPFLTR_IHVSTREAMING_ID
DPFLTR_IHVBUS_ID
DPFLTR_IHVDRIVER_ID
格式 [in]
指定指向要打印的格式字符串的指针。 Format 字符串支持大多数 printf 样式的格式规范字段。 但是,Unicode 格式代码 (%C、 %S、 %lc、 %ls、 %wc、 %ws 和 %wZ) 只能与 IRQL = PASSIVE_LEVEL一起使用。 KdPrintEx 例程不支持 (%f、%e、%E、%g、%G、%a 或 %A) 的任何浮点类型。
级别 [in]
指定此消息的严重性。 这可以是任何 32 位整数。 介于 0 和 31 之间的值 (非独占) 与 32 到 0xFFFFFFFF 之间的值不同。 有关详细信息,请参阅 读取和筛选调试消息。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 在 Microsoft Windows XP 及更高版本中可用。 |
目标平台 | 桌面 |
标头 | wdm.h (包括 Wdm.h) |
Library | NtosKrnl.lib (请参阅 DbgPrintEx.) |
DLL | NtosKrnl.exe |
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈