DbgPrint 函数 (wdm.h)

DbgPrint 例程会在指定应用的条件时向内核调试器发送消息(请参阅下面的 备注 部分)。

语法

ULONG DbgPrint(
  PCSTR Format,
  ...   
);

参数

Format

指定要打印的格式字符串的指针。 Format 字符串支持大多数 printf样式 格式规范字段。 但是,Unicode 格式代码(%C%S%lc%ls%wc%ws%wZ)只能与 IRQL = PASSIVE_LEVEL一起使用。 DbgPrint 例程不支持任何浮点类型(%f%e%E%g%G%a%A)。

...

指定格式字符串的参数,如 printf中所示。

返回值

如果成功,DbgPrint 返回 NTSTATUS 代码STATUS_SUCCESS;否则,它将返回相应的错误代码。

言论

可以在 IRQL<=DIRQL 调用 DbgPrintDbgPrintEx。 但是,Unicode 格式代码(%C%S%lc%ls%wc%ws%wZ)只能用于 IRQL=PASSIVE_LEVEL。 此外,由于调试器使用进程间中断(IPIs)与其他处理器通信,因此在 IRQL>DIRQL 调用 DbgPrint 可能会导致死锁。

只有内核模式驱动程序才能调用 DbgPrint 例程。

仅当某些条件适用时,DbgPrint 才会发送消息。 具体而言,它的行为类似于具有 DEFAULT 组件的 DbgPrintEx 例程和消息重要性级别DPFLTR_INFO_LEVEL。 换句话说,以下两个函数调用是相同的:

DbgPrint ( Format, arguments )

DbgPrintEx ( DPFLTR_DEFAULT_ID, DPFLTR_INFO_LEVEL, Format, arguments )

有关消息筛选、组件和消息重要性级别的详细信息,请参阅 读取和筛选调试消息

建议使用 DbgPrintEx 而不是 DbgPrint,因为这样就可以控制消息发送的条件。

除非绝对必要,否则不应从用户输入或其他进程获取字符串并将其传递给 DbgPrint。 如果使用未创建的字符串,则必须验证这是有效的格式字符串,并且格式代码是否与类型和数量的参数列表匹配。 最佳编码做法是将所有 格式 字符串设置为静态,并在编译时定义。

Format 字符串的大小或参数数没有上限。 但是,对 DbgPrint 的任何单个调用将仅传输 512 字节的信息。 DbgPrint 缓冲区的大小也有限制。 有关详细信息,请参阅 DbgPrint 缓冲区和调试器

要求

要求 价值
目标平台 普遍
标头 wdm.h (包括 Wdm.h)
NtDll.lib(用户模式):NtosKrnl.lib (内核模式)
DLL NtDll.dll(用户模式):NtosKrnl.exe(内核模式)
IRQL IRQL <= DIRQL (请参阅注释部分)

另请参阅

DbgPrintEx

KdPrint

KdPrintEx