次の方法で共有


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-style書式指定フィールドの大部分をサポートします。 ただし、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 でのみ使用できます。 また、デバッガーはプロセス間割り込み (IPI) を使用して他のプロセッサと通信するため、IRQL>DIRQL で DbgPrint 呼び出すとデッドロックが発生する可能性があります。

DbgPrintEx は、指定した文字列をカーネル デバッガーに渡すか、コンポーネント ID レベル、および対応するコンポーネント フィルター マスクの値に応じて、まったく何も行いません。 詳細については、「メッセージ の読み取りとフィルター処理の」を参照してください。

絶対に必要でない限り、ユーザー入力または別のプロセスから文字列を取得し、DbgPrintEx 渡すべきではありません。 作成しなかった文字列を使用する場合は、これが有効な書式指定文字列であること、および書式コードが型と数量の引数リストと一致することを確認する必要があります。 最適なコーディング方法は、すべての Format 文字列を静的にし、コンパイル時に定義することです。

Format 文字列のサイズや引数の数に上限はありません。 ただし、DbgPrintEx 1 回の呼び出しでは、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