KeRegisterBugCheckCallback 関数 (wdm.h)
KeRegisterBugCheckCallback ルーチンは、オペレーティング システムがバグ チェックを発行したときに実行される BugCheckCallback ルーチンを登録します。
構文
BOOLEAN KeRegisterBugCheckCallback(
[out] PKBUGCHECK_CALLBACK_RECORD CallbackRecord,
[in] PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine,
[in, optional] PVOID Buffer,
[in] ULONG Length,
[in] PUCHAR Component
);
パラメーター
[out] CallbackRecord
呼び出し元が非ページ ストレージを提供する KeInitializeCallbackRecord によって以前に初期化されたコールバック レコードへのポインター。
[in] CallbackRoutine
ドライバー指定の KBUGCHECK_CALLBACK_ROUTINEコールバック関数へのポインター。
[in, optional] Buffer
呼び出し元が指定したバッファーへのポインター。非ページ プールなど、常駐メモリ内に存在する必要があります。
[in] Length
呼び出し元によって割り当てられたバッファーのサイズをバイト単位で指定します。
[in] Component
呼び出し元を識別する null で終わる ANSI 文字列へのポインター。 通常、この文字列には、デバイス ドライバーの名前、またはそのデバイスの名前が含まれます。
戻り値
KeRegisterBugCheckCallback は、呼び出し元が指定したルーチンが登録されたバグ チェック コールバックのセットに正常に追加された場合は TRUE を返します。それ以外の場合は FALSE を返します。
注釈
KeRegisterBugCheckCallback ルーチンは、最も単純な種類のバグ チェック コールバック ルーチンである BugCheckCallback ルーチンを登録します。
KbCallbackDumpIo や KbCallbackAddPages ルーチンなど、他の種類のバグ チェック コールバックを登録するには、代わりに KeRegisterBugCheckReasonCallback ルーチンを使用します。
BugCheckCallback ルーチンは、システムがバグ チェックを発行したときに実行されます。 ドライバーは、ルーチンを使用して、デバイスを既知の状態にリセットできます。 詳細については、「 BugCheckCallback」を参照してください。
ドライバーは、 KeDeregisterBugCheckCallback ルーチンを使用してコールバックを削除できます。 アンロードできるドライバーは、 Unload ルーチン内 のすべてのコールバックを削除する必要があります。
コンポーネント文字列は、クラッシュ ダンプデバッグ中にドライバーを識別するために使用されます。 指定した コンポーネント 文字列に対応するクラッシュ ダンプ データを表示するには、 !bugdump デバッガー拡張機能を使用します。 コールバック ルーチン自体チェックバグをデバッグすることもできます。 デバッガーとデバッガー拡張機能の詳細については、「 Windows デバッグ」を参照してください。
実装
BugCheckCallback コールバック ルーチンを定義するには、まず、定義するコールバック ルーチンの種類を識別する関数宣言を指定する必要があります。 Windows には、ドライバーのコールバック関数の種類のセットが用意されています。 コールバック関数の種類を使用して関数を宣言すると、ドライバー、静的ドライバー検証ツール (SDV)、およびその他の検証ツールのコード分析でエラーが検出されます。
たとえば、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_ annotation
してください。 Use_decl_annotations注釈を使用すると、ヘッダー ファイル内のKBUGCHECK_CALLBACK_ROUTINE関数型に適用される注釈が確実に使用されます。 関数宣言の要件の詳細については、「 WDM ドライバーの関数ロール型を使用して関数を宣言する」を参照してください。 Use_decl_annotationsの詳細については、「関数の動作に注釈を付ける」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 2000 以降で使用できます。 |
対象プラットフォーム | ユニバーサル |
Header | wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む) |
Library | NtosKrnl.lib |
[DLL] | NtosKrnl.exe |
IRQL | 任意のレベル |