DbgPrintEx 函数 (wdm.h)

如果满足指定的条件,DbgPrintEx 例程会将字符串发送到内核调试器。

语法

NTSYSAPI ULONG DbgPrintEx(
  [in] ULONG ComponentId,
  [in] ULONG Level,
  [in] PCSTR Format,
       ...   
);

参数

[in] ComponentId

指定调用此例程的组件。 这必须是 Dpfilter.h 头文件中定义的组件名称筛选器 ID 之一。 为了避免将驱动程序的输出与 Windows 组件的输出混合,应仅对 ComponentId使用以下值:

  • DPFLTR_IHVVIDEO_ID
  • DPFLTR_IHVAUDIO_ID
  • DPFLTR_IHVNETWORK_ID
  • DPFLTR_IHVSTREAMING_ID
  • DPFLTR_IHVBUS_ID
  • DPFLTR_IHVDRIVER_ID

[in] Level

指定要发送的消息的严重性。 这可以是任何 32 位整数。 0 和 31 之间的值(含)的处理方式不同于 32 和 0xFFFFFFFF 之间的值。 有关详细信息,请参阅 读取和筛选调试消息

[in] Format

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

...

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

返回值

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

言论

只有内核模式驱动程序可以调用 DbgPrintEx 例程。

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

DbgPrintEx 将指定的字符串传递给内核调试器或根本不执行任何作,具体取决于 ComponentIdLevel的值以及相应的组件筛选器掩码。 有关详细信息,请参阅 读取和筛选调试消息

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

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

要求

要求 价值
最低支持的客户端 Microsoft Windows XP 及更高版本中提供。
目标平台 普遍
标头 wdm.h (包括 Wdm.h)
NtDll.lib(用户模式):NtosKrnl.lib (内核模式)
DLL NtDll.dll(用户模式):NtosKrnl.exe(内核模式)
IRQL <= DIRQL (请参阅注释部分)

另请参阅

DbgPrint

KdPrint

KdPrintEx

vDbgPrintEx