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の詳細については、「関数の動作に注釈を付ける」を参照してください。
要件
要件 | 値 |
---|---|
対象プラットフォーム | デスクトップ |
Header | wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む) |
IRQL | HIGH_LEVELで呼び出されます。 |