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 true,如果呼叫端提供的例程已成功新增至已註冊的錯誤檢查回呼集:否則,它會傳回 false 。
言論
KeRegisterBugCheckCallback 例程會註冊 BugCheckCallback 例程,這是最簡單的 Bug 檢查回呼例程。
若要註冊其他類型的 Bug 檢查回呼,例如 KbCallbackDumpIo 和 KbCallbackAddPages 例程,請改用 KeRegisterBugCheckReasonCallback 例程。
當系統發出錯誤檢查時,會執行 BugCheckCallback 例程。 驅動程式可以使用例程將裝置重設為已知狀態。 如需詳細資訊,請參閱 BugCheckCallback。
驅動程式可以使用 KeDeregisterBugCheckCallback 例程來移除回呼。 任何可以卸除的驅動程式都必須移除其 Unload 例程中的所有回呼。
在損毀傾印偵錯期間,會使用 元件 字串來識別驅動程式。 若要顯示對應至任何指定 元件 字串的損毀傾印數據,您可以使用 !bugdump 調試程序擴充功能。 您也可以偵錯 Bug 檢查回呼例程本身。 如需除錯程式和除錯程式擴充功能的詳細資訊,請參閱 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 開始提供。 |
目標平臺 | 普遍 |
標頭 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
連結庫 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | 任何層級 |