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
印刷する書式指定文字列へのポインターを指定します。 書式指定文字列は、ほとんどの 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でのみ使用できます。 また、デバッガーはプロセス間割り込み (IPI) を使用して他のプロセッサと通信するため、IRQL>DIRQL で DbgPrint を呼び出すとデッドロックが発生する可能性があります。
DbgPrintEx は、 ComponentId、 Level、および対応するコンポーネント フィルター マスクの値に応じて、指定された文字列をカーネル デバッガーに渡すか、まったく何も行いません。 詳細については、「 デバッグ メッセージの読み取りとフィルター処理」を参照してください。
絶対に必要でない限り、ユーザー入力または別のプロセスから文字列を取得して DbgPrintEx に渡すべきではありません。 作成しなかった文字列を使用する場合は、これが有効な書式指定文字列であること、および書式コードが型と数量の引数リストと一致することを確認する必要があります。 最適なコーディング方法は、すべての 書式指定 文字列を静的にし、コンパイル時に定義することです。
Format 文字列のサイズや引数の数に上限はありません。 ただし、 DbgPrintEx への 1 回の呼び出しでは、512 バイトの情報のみが送信されます。 DbgPrint バッファーのサイズにも制限があります。 詳細については、「 DbgPrint バッファーとデバッガー 」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Microsoft Windows XP 以降で使用できます。 |
対象プラットフォーム | ユニバーサル |
Header | wdm.h (Wdm.h を含む) |
Library | NtDll.lib (ユーザー モード);NtosKrnl.lib (カーネル モード) |
[DLL] | NtDll.dll (ユーザー モード);NtosKrnl.exe (カーネル モード) |
IRQL | <= DIRQL (「コメント」セクションを参照) |