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

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

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

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

要求

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

另请参阅

DbgPrint

KdPrint

KdPrintEx

vDbgPrintEx