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 中使用。 此外,由于调试器使用进程间中断 (IPI) 与其他处理器通信,因此在 IRQL>DIRQL 中调用 DbgPrint 可能会导致死锁。

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

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

DbgPrint ( Format, arguments )

DbgPrintEx ( DPFLTR_DEFAULT_ID, DPFLTR_INFO_LEVEL, Format, arguments )

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

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

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

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

要求

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

另请参阅

DbgPrintEx

KdPrint

KdPrintEx