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 例程。
DbgPrint 和 DbgPrintEx 可以在 IRQL<=DIRQL 呼叫。 不過,Unicode 格式代碼(%wc 和 %ws)只能用於 IRQL = PASSIVE_LEVEL。 此外,由於調試程式會使用進程間中斷 (IPIs) 與其他處理器通訊,因此在 IRQL>DIRQL 呼叫 dbgPrint,可能會導致死結。
DbgPrintEx 會將指定的字元串傳遞至核心調試程式,或完全不執行任何動作,視 ComponentId、Level和對應的元件篩選遮罩的值而定。 如需詳細資訊,請參閱 讀取和篩選偵錯訊息。
除非絕對必要,否則您不應該從使用者輸入或其他進程取得字串,並將它傳遞至 DbgPrintEx。 如果您使用未建立的字串,您必須確認這是有效的格式字串,而且格式代碼符合類型和數量中的自變數清單。 最佳編碼作法是讓所有 Format 字串在編譯時期為靜態和定義。
Format 字串的大小或自變數數目沒有上限。 不過,DbgPrintEx 的任何單一呼叫只會傳輸 512 個字節的資訊。 DbgPrint 緩衝區的大小也有限制。 如需詳細資訊,請參閱 DbgPrint 緩衝區和調試程式。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | 可在 Windows XP 和更新版本中Microsoft使用。 |
目標平臺 | 普遍 |
標頭 | wdm.h (包括 Wdm.h) |
連結庫 | NtDll.lib (使用者模式):NtosKrnl.lib (核心模式) |
DLL | NtDll.dll (使用者模式):NtosKrnl.exe (核心模式) |
IRQL | <= DIRQL (請參閱批注一節) |