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 呼叫 DbgPrint 和 DbgPrintEx。 不過,Unicode 格式代碼 (%wc 和 %ws) 只能用於 IRQL = PASSIVE_LEVEL。 此外,由於調試程式會使用進程間中斷 (IPIS) 與其他處理器通訊,因此在IRQL>DIRQL呼叫 DbgPrint 可能會導致死結。
DbgPrintEx 會根據 ComponentId、 Level 和對應的元件篩選遮罩的值,將指定的字串傳遞至核心調試程式,或完全不執行任何動作。 如需詳細資訊,請參閱 讀取和篩選偵錯訊息。
除非絕對必要,否則您不應該從使用者輸入或其他進程取得字串,並將它傳遞至 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 (請參閱批注一節) |