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 如果呼叫端提供的例程成功新增至已註冊的錯誤檢查回呼集,則 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 開始提供。 |
目標平台 | Universal |
標頭 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
程式庫 | NtosKrnl.lib |
Dll | NtosKrnl.exe |
IRQL | 任何層級 |