共用方式為


dbgPrintEx 函式 (wdm.h)

如果符合您指定的條件, DbgPrintEx 例程會將字串傳送至核心調試程式。

語法

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

參數

[in] ComponentId

指定呼叫這個例程的元件。 這必須是 Dpfilter.h 頭檔中定義的其中一個元件名稱篩選標識碼。 若要避免將驅動程序的輸出與 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 字串都是靜態的,並在編譯時期定義。

Format 字串的大小或自變數數目沒有上限。 不過,任何 對 DbgPrintEx 的單一呼叫只會傳輸 512 個字節的資訊。 此外,也會限制 DbgPrint 緩衝區的大小。 如需詳細資訊 ,請參閱 DbgPrint 緩衝區和調試程式

規格需求

需求
最低支援的用戶端 可在 Microsoft Windows XP 和更新版本中使用。
目標平台 Universal
標頭 wdm.h (包含 Wdm.h)
程式庫 NtDll.lib (使用者模式) ;NtosKrnl.lib (核心模式)
Dll NtDll.dll (使用者模式) ;NtosKrnl.exe (核心模式)
IRQL <= DIRQL (請參閱批注一節)

另請參閱

DbgPrint

KdPrint

KdPrintEx

vDbgPrintEx