次の方法で共有


DbgPrint 関数 (wdm.h)

DbgPrint ルーチンは、指定した条件が適用されるときにカーネル デバッガーにメッセージを送信します (後述の「解説」セクションを参照してください)。

構文

ULONG DbgPrint(
  PCSTR Format,
  ...   
);

パラメーター

Format

印刷する書式指定文字列へのポインターを指定します。 Format 文字列は、printf-style書式指定フィールドの大部分をサポートします。 ただし、Unicode 形式コード (%C%S%lc%ls%wc%ws、および %wZ) は、IRQL = PASSIVE_LEVELでのみ使用できます。 DbgPrint ルーチンは、浮動小数点型 (%f%e%E%g%G%a、または %A) をサポートしていません。

...

printf のように、書式指定文字列の引数指定します。

戻り値

成功した場合、DbgPrint は NTSTATUS コード STATUS_SUCCESSを返します。それ以外の場合は、適切なエラー コードが返されます。

備考

DbgPrint と DbgPrintEx は、IRQL<=DIRQL で呼び出すことができます。 ただし、Unicode 形式コード (%C%S%lc%ls%wc%ws、および %wZ) は IRQL=PASSIVE_LEVEL でのみ使用できます。 また、デバッガーはプロセス間割り込み (IPI) を使用して他のプロセッサと通信するため、IRQL>DIRQL で DbgPrint 呼び出すとデッドロックが発生する可能性があります。

DbgPrint ルーチンを呼び出すことができるのは、カーネル モード ドライバーだけです。

DbgPrint は、特定の条件が適用される場合にのみメッセージを送信します。 具体的には、DEFAULT コンポーネントとDPFLTR_INFO_LEVELのメッセージの重要度レベルを持つ DbgPrintEx ルーチンのように動作します。 つまり、次の 2 つの関数呼び出しは同じです。

DbgPrint ( Format, arguments )

DbgPrintEx ( DPFLTR_DEFAULT_ID, DPFLTR_INFO_LEVEL, Format, arguments )

メッセージのフィルター処理、コンポーネント、およびメッセージの重要度レベルの詳細については、「メッセージの読み取りとフィルター処理 メッセージのを参照してください。

DbgPrint 代わりに DbgPrintEx 使用することをお勧めします。これは、メッセージの送信条件を制御できるためです。

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

Format 文字列のサイズや引数の数に上限はありません。 ただし、DbgPrint への 1 回の呼び出しでは、512 バイトの情報のみが送信されます。 DbgPrint バッファーのサイズにも制限があります。 詳細については、DbgPrint バッファーとデバッガー を参照してください。

必要条件

要件 価値
ターゲット プラットフォーム 万国
ヘッダー wdm.h (Wdm.h を含む)
ライブラリ NtDll.lib (ユーザー モード);NtosKrnl.lib (カーネル モード)
DLL NtDll.dll (ユーザー モード);NtosKrnl.exe (カーネル モード)
IRQL IRQL <= DIRQL (コメントセクションを参照)

関連項目

DbgPrintEx

KdPrint する

KdPrintEx