KBUGCHECK_CALLBACK_ROUTINE コールバック関数 (wdm.h)
BugCheckCallback ルーチンは、システムがバグ チェックを発行するたびに実行されます。
KBUGCHECK_REASON_CALLBACK_ROUTINE コールバック関数は、この古いコールバックよりも多くの機能を提供します。
構文
KBUGCHECK_CALLBACK_ROUTINE KbugcheckCallbackRoutine;
void KbugcheckCallbackRoutine(
[in] IN PVOID Buffer,
[in] IN ULONG Length
)
{...}
パラメーター
[in] Buffer
コールバックの登録時に指定されたバッファーへのポインター。
[in] Length
Buffer パラメーターが指すバッファーの長さをバイト単位で指定します。
戻り値
何一つ
備考
ドライバーは、システムがバグ チェックを発行した場合にデバイスを既知の状態にリセットする BugCheckCallback を提供できます。
KeRegisterBugCheckCallback を使用して、BugCheckCallback ルーチンを登録します。 その後、ドライバーは、KeDeregisterBugCheckCallback ルーチンを使用してコールバックを削除できます。 ドライバーをアンロードできる場合は、その アンロード ルーチンに登録されているコールバックを削除する必要があります。
BugCheckCallback ルーチンは、実行できるアクションで厳密に制限されています。 詳細については、「バグ チェック コールバック ルーチンの を記述するを参照してください。 このルーチンは、READ_PORT_XXX、READ_REGISTER_XXX、WRITE_PORT_XXX、WRITE_REGISTER_および XXX ルーチンを安全に使用して、デバイスと対話できます。
バグ チェックを発行するときにシステムとのより高度な対話を必要とするドライバーは、代わりに KbCallbackDumpIo ルーチンまたは KbCallbackSecondaryDumpData ルーチンを実装できます。
Windows XP SP1 および Windows Server 2003 オペレーティング システム以降では、BugCheckCallback ルーチンは、システム クラッシュ ダンプ ファイルが既に書き込まれた後に実行されることに注意してください。 (以前のバージョンの Windows では、クラッシュ ダンプ ファイルが書き込まれる前にルーチンが実行されます)。したがって、Buffer パラメーターで指定されたバッファーに格納されているデータは、クラッシュ ダンプ ファイルには表示されません。 クラッシュ ダンプ ファイルにデータを書き込むのに必要なドライバーは、代わりに KbCallbackSecondaryDumpData ルーチンを実装します。 (以前のバージョンの Windows では、Buffer に書き込まれたデータがクラッシュ ダンプ ファイルに表示されます)。
例
BugCheckCallback コールバック ルーチンを定義するには、まず、定義するコールバック ルーチンの種類を識別する関数宣言を指定する必要があります。 Windows には、ドライバーのコールバック関数の種類のセットが用意されています。 コールバック関数の種類を使用して関数を宣言すると、ドライバー のコード分析、静的ドライバー検証ツール (SDV)、およびその他の検証ツールをすると、エラーが検出され、Windows オペレーティング システムのドライバーを記述するための要件になります。
たとえば、MyBugCheckCallback
という名前の BugCheckCallback コールバック ルーチンを定義するには、次のコード例に示すようにKBUGCHECK_CALLBACK_ROUTINE型を使用します。
KBUGCHECK_CALLBACK_ROUTINE MyBugCheckCallback;
次に、次のようにコールバック ルーチンを実装します。
_Use_decl_annotations_
VOID
MyBugCheckCallback(
PVOID Buffer,
ULONG Length
)
{
// Function body
}
KBUGCHECK_CALLBACK_ROUTINE関数の種類は、Wdm.h ヘッダー ファイルで定義されています。 コード分析ツールの実行時にエラーをより正確に識別するには、Use_decl_annotations 注釈を関数定義に追加してください。 Use_decl_annotations 注釈を使用すると、ヘッダー ファイル内のKBUGCHECK_CALLBACK_ROUTINE関数型に適用される注釈が使用されます。 関数宣言の要件の詳細については、「WDM ドライバーの の関数の役割の種類を使用して関数を宣言するを参照してください。 Use_decl_annotationsの詳細については、「関数の動作に注釈を付ける」を参照してください。
必要条件
要件 | 価値 |
---|---|
ターゲット プラットフォーム の | デスクトップ |
ヘッダー | wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む) |
IRQL | HIGH_LEVELで呼び出されます。 |
関連項目
バグ チェック コールバック ルーチンの を記述する
KeDeregisterBugCheckCallback の